// 其他杂项知识点
对于普通用户,Base shell 默认的提示符是美元符号$;对于超级用户(root 用户),Bash Shell 默认的提示符是井号#
-------
\#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell;后面的/bin/bash就是指明了解释器的具体位置
-------
read 命令用来从标准输入读取用户输入的数据
-------
点号用于执行某个脚本,甚至脚本没有可执行权限也可以运行。有时候在测试运行某个脚本时可能并不想为此修改脚本权限,这时候就可以使用.来运行脚本,非常方便。
-------
sh-3.2# echo $SHELL // 查看系统使用的shell为bash
/bin/sh
sh-3.2# bash --version // 查看bash版本 等同 echo $BASH_VERSION
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)
Copyright (C) 2007 Free Software Foundation, Inc.
--------
字符串截取操作
${string: start :length} // 从0开始 截取的长度(可以省略,省略长度代表截取到末尾)
hello='Hello World!'
echo ${hello:6:5} // 从6开始截取5个字符
echo ${hello:6} // 截取到末尾
hello='Hello World!' // 从指定字符开始截取到末尾
echo ${hello#*o} // \#代表指定截取 \*通配左边所有字符
sh-3.2# echo ${hello#r}
Hello World!
sh-3.2# echo ${hello#Hello Wor} // 不使用通配符也行
# 截取右边字符,忽略左边
sh-3.2# echo ${hello#*o} // 默认从第一个指定字符开始
World!
sh-3.2# echo ${hello##*o} // 从最后一个指定字符开始匹配
rld!
% 截取左边,忽略右边 (跟#相反)
sh-3.2# echo ${hello%o*}
Hello W
sh-3.2# echo ${hello%%o*}
Hell
--------
数组合并
sh-3.2# arr1=(1 2 3)
sh-3.2# arr2=(4 5 6)
sh-3.2# arr3=(${arr1[@]} ${arr2[@]})
sh-3.2# echo ${arr3[@]}
1 2 3 4 5 6
--------
/etc/bashrc 文件
alias hello='ls -l' // 添加alias别名
source 执行一下
--------
`` 反引号和 $() 差不多,字符串将解释成shell命令来执行
z:~ k$ for i in `ls`; do
> echo $i
> done
Applications
Applications
(Parallels)
Desktop
z:~ k$
--------
((表达式)) 多个表达式之间以逗号,分隔,
sh-3.2# echo $((a=2,b=3)) // $获取 (( )) 命令的结果
3 // 以最后一个表达式的值作为整个 (( )) 命令的执行结果
// 使用变量时不用加$前缀,(( )) 会自动解析变量名
sh-3.2# a=2
sh-3.2# b=3
sh-3.2# echo $((a))
2
let 也是表达式求值 和(())一样,只是当是多个表达式时,是以空格为分割
sh-3.2# let a=1 b=2
sh-3.2# echo $a $b
1 2
$[] 跟let (()) 也差不多
sh-3.2# echo $[1+2]
3
--------
expr 整数计算
sh-3.2# expr 1 + 2
3
sh-3.2# expr 1 \* 3
3
sh-3.2# a=1
sh-3.2# expr $a
1
sh-3.2# expr \( 1 \* 3 \) + 2 // 括号也要转义
5
--------
for 循环
for((exp1; exp2; exp3))
do
xxx
done
--------
退出状态
每一条 Shell 命令,当它退出(运行结束)时,都会返回一个整数值给调用(使用)它的程序,即命令的退出状态
if 语句的判断条件,从本质上讲,判断的就是命令的退出状态
按照惯例来说,退出状态为 0 表示“成功”;也就是说,程序执行完成并且没有遇到任何问题。除 0 以外的其它任何退出状态都为“失败”
sh-3.2# echo $(( 1 * 2 ))
2
sh-3.2# echo $?
0 // 0成功
sh-3.2# abcdefg
sh: abcdefg: command not found
sh-3.2# echo $?
127 // 失败
--------
select in 循环,它可以显示出带编号的菜单,用户输入不同的编号就可以选择不同的菜单,并执行不同的功能
sh-3.2# select name in "aa" "bb" "cc" "dd"
\> do
\> echo $name
\> done
1) aa
2) bb
3) cc
4) dd
\#? 1
aa
\#? 2
bb
\#? 3
cc
\#? 4