1. 将变量作为字符串传递参数
用双引号 "$变量"
例如:
cat file |grep "$parameter"
2. 取字符串的一部分
${变量:位置起点}
${变量:位置起点:长度}
PS:位置起点默认为0,在${}中,变量前面的$可以不写
#定义变量 myname=lovelace #取得变量字符串从第三个字符开始到字符串结尾的所有字符 echo ${myname:3} elace #取得变量字符串中从第四个字符开始,长度为2的字符 echo ${myname:4:2} la
3. 取部分参数
命令行参数从$1开始,$@代表全部,$0代表指令本身
${@:起点}:由起点开始,取得后面的所有参数
${@:起点:个数}:由起点开始,取指定个数的位置参数
示例脚本 argument.sh
#取得程序名称 echo $0 #取得变量的所有值 echo ${@:1} #取得变量的个数 echo $#
执行指令和结果:
# ./argument.sh 12 32 45 ------------------------------------------------- ./argument.sh 12 32 45 3
4. 变量运算
用expr,bc进行高级运算。可以用echo `expr 1 +2`来输出1+2的结果,用expr表示后面的表达式为一个数学运算。
用let进行数学运算。可以先将运算的结果赋值给变量b,运算命令是b=let 1 + 2。然后用echo$b来输出b的值。
用$[]表示数学运算。将一个数学运算写到$[]符号的中括号中,中括号中的内容将先进行数学运算。
用(( ))可进行运算,也可以用来转换字符串成数字。例如:
str='235689741' (($str)) echo $[ $str+5 ]
5. 在shell中字符串与数值的比较方法是不同的,要注意区分
整数比较:
-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
< 小于(需要双括号),如:(("$a" < "$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))
> 大于(需要双括号),如:(("$a" > "$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))
字符串比较:
= 等于,如:if [ "$a" = "$b" ]
== 等于,如:if [ "$a" == "$b" ], 与=等价
注意:==的功能在[[]]和[]中的行为是不同的,如下:
1 [[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true
2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true
3 [ $a == z* ] # File globbing 和word splitting将会发生
4 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true
!= 不等于,如:if [ "$a" != "$b" ], 这个操作符将在[[]]结构中使用模式匹配.
< 小于,在ASCII字母顺序下.如:
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ] 在[]结构中"<"需要被转义.
> 大于,在ASCII字母顺序下.如:
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ] 在[]结构中">"需要被转义.
-z 字符串为"null".就是长度为0.
-n 字符串不为"null"