一、算术运算
Bash中的算术运算方法有一下几种:
1.使用let命令
kdyzm@kdyzm:~$ let A=1+2 kdyzm@kdyzm:~$ echo $A 3 kdyzm@kdyzm:~$
2.$[expression]
kdyzm@kdyzm:~$ A=$[1+2] kdyzm@kdyzm:~$ echo $A 3 kdyzm@kdyzm:~$
3.$((expression))
kdyzm@kdyzm:~$ B=$((1+2)) kdyzm@kdyzm:~$ echo $B 3 kdyzm@kdyzm:~$
4.使用expr命令
kdyzm@kdyzm:~$ expr 1+2 1+2 kdyzm@kdyzm:~$ expr 1 + 2 3 kdyzm@kdyzm:~$
上面的运算结果显示使用expr表达式需要注意操作符两侧必须带有空格,否则被识别为字符串类型。
二、文件测试
文件测试也是使用test命令,同样可以简写成为[expression]
test -b FILE:文件存在而且是块设备文件 -c FILE:文件存在而且是字符设备文件 -d FILE:文件存在而且是目录 -e FILE:文件存在 -f FILE:文件存在而且是一个普通文件 -h|-L FILE:文件存在而且是一个链接文件 -p FILE:文件存在而且是一个命名管道文件 -S FILE:文件存在而且是一个套接字文件 -s FILE:文件存在而且大小不为0 -r FILE:文件存在而且可读(当前用户) -w FILE:文件存在而且可写(当前用户) -x FILE:文件存在而且可执行(当前用户)
三、字符测试
字符测试是使用test命令,同样可以简写成为[expression]
test -n STRING:字符串长度不为0 -z STRING:字符串长度为0 STRING1 = STRING2 :两个字符串相同 STRING1 != STRING2 :两个字符串不相同
四、位置变量与特殊变量
1.特殊变量
$? :命令执行状态结果,0表示成功,1-255表示失败 $# :参数的个数 $* :参数列表 $@ :参数列表
2.位置变量
bash中使用位置变量能够直接引用命令参数,$1表示第一个参数,$2表示第二个参数,,,,,
3.使用shift命令
shift
shift命令能够“删除”掉参数列表中的第一个参数,使得是使用$1访问原来参数列表中的第二个参数。
多次使用shift命令的结果以此类推。
五、杂项
1.自定义退出码
exit n
使用exit能够退出脚本,如果只是单独的使用一个exit命令,,没有定义退出码,使用最后执行的一条命令的执行状态结果作为退出码。
2.使用bash命令检测脚本文件是否有语法错误
bash -n FILE :检测脚本稳健是否有语法错误 bash -x FILE :单步执行,将每一步的执行过程打印到屏幕
六、练习
1.写一个脚本,能够接收一个参数,判断该参数是否是一个文件,如果是,则打印文件类型,否则提示文件不存在。
#!/bin/bash if [ -e $1 ];then file $1 else echo "No such file !" fi
2.写一个脚本,给该脚本传递两个参数,显示两个数的和与乘积,如果参数不够则进行提示并退出。
#!/bin/bash if [ $# -lt 2 ];then echo "USAGE : test4.sh ARG1 ARG2" exit 1 fi echo "$1+$2=$[$1+$2]" echo "$1*$2=$[$1*$2]"
3.传递三个参数给脚本,第一个数是整数,第二个是操作符,第三个数是整数,将计算结果计算出来显示在屏幕上。
#!/bin/bash echo $@ if [ $# -lt 3 ] ;then echo "USAGE : calculate.sh VAR1 OPERATOR VAR2" exit 1 fi VAR1=$1 OP=$2 VAR2=$3 if [ $OP = '+' ];then echo "$VAR1+$VAR2=$[$VAR1+$VAR2]" exit 0 elif [ $OP = '-' ];then echo "$VAR1-$VAR2=$[$VAR1-$VAR2]" exit 0 elif [ $OP = '*' ];then echo "$VAR1*$VAR2=$[$VAR1*$VAR2]" exit 0 elif [ $OP = '/' ];then echo "$VAR1/$VAR2=$[$VAR1/$VAR2]" exit 0 else echo "The Operator must be +-*/" exit 1 fi
这里还有一个非常重要的问题需要注意,在运行该命令的时候,输入形式应当如下所示:
kdyzm@kdyzm:~/scripts$ ./calculate.sh 2 '\*' 3 2 \* 3 The Operator must be +-*/ kdyzm@kdyzm:~/scripts$
首先,操作符必须使用''括起来,同时,需要用反斜线转义操作符:
+ -> '\+' - -> '\-' * -> '\*' / -> '\/'
这么做是有原因的,特别是*符号,它有在bash中有特殊的含义,使用
echo 2 * 3
命令,将会显示如下结果:
kdyzm@kdyzm:~$ echo 2 * 3 2 a.txt b.txt datastructure Desktop Documents Downloads examples.desktop Music Pictures ProgramFiles Public scripts SoftWare Templates Untitled Document Untitled Document~ Videos 3 kdyzm@kdyzm:~$
* 在这里会被bash解析成“显示所有文件”的意思,所以必须对其进行转义,使用'\'进行转义,但是仅仅这样还不够,必须得加上''表示强引用才行,否则的话还是会被解析;这里使用echo $@命令查看参数列表。
转载于:https://blog.51cto.com/kdyzm/1740741