一、算术运算
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 $@命令查看参数列表。
本文出自 “狂盗一枝梅的博客” 博客,请务必保留此出处http://kdyzm.blog.51cto.com/8316029/1740741