if 判断:if [ <参数> ]
<文件表达式>
if [ -e filename ] #如果 文件filename存在,则为真
if [ -d filename ] #如果 filename为目录,则为真
if [ -f filename ] #如果 filename为常规文件,则为真
if [ -L filename ] #如果 filename为符号链接,则为真
if [ -r filename ] #如果 filename可读,则为真
if [ -w filename ] #如果 filename可写,则为真
if [ -x filename ] #如果 filename可执行,则为真
if [ -s filename ] #如果文件长度不为0,则为真
if [ -h filename ] #如果文件是软链接,则为真
if [ filename1 -nt filename2 ] #如果 filename1比 filename2新,则为真
if [ filename1 -ot filename2 ] #如果 filename1比 filename2旧,则为真
<整数变量表达式 >
if [ number1 -eq number2 ] #等于
if [ number1 -ne number2 ] #不等于
if [ number1 -gt number2 ] #大于
if [ number1 -ge number2 ] #大于等于
if [ number1 -lt number2 ] #小于
if [ number1 -le number2 ] #小于等于
<字符串变量表达式>
string = ""
if [ -n $string ] #如果string 非空(非0),返回0(true)
if [ -z $string ] #如果string 为空,则为真
if [ $sting ] #如果string 非空,返回0 (和-n类似)
string2 = ""
if [ $string == $string2 ]#如果string1等于string2,则为真
str = "hello"
if [ "${str}" = "hello" ]
可改写为
if [ "${str}"x = "hello"x ]
在字符串后面拼接上字符串x,保证等式两边始终都是有效值,避免当变量为空时的报错;
<逻辑表达式>
-a #与 and
-o #或 or
! #逻辑非 not
常用符号
1.&&
cmd1 && cmd2 # && 左边的cmd1执行成功,则执行cmd2;否则cmd2不执行
2.||
cmd1 && cmd2 # ||则与&&相反。如果||左边的命令(cmd1)未执行成功,那么就执行||右边的命令(cmd2);如果左边的命令执行成功了,那么就不会执行右边的命令
3.()
(cmd1;cmd2;cmd3;cmd4) # 分隔一组命令
4.{}
{ cmd1; cmd2; cmd3;... } # cmd与{} 间有空格
- {}代替();将{}中的组命令最为一个整体放到子shell中执行
5.>与 >> 重定向符号
5.1 >
‘>’ 为创建
echo "" > path/xxx # path/xxx 不存在则创建、存在则覆盖刷新
5.2 >>
‘>>’ 为追加
echo "" >> path/xxx # path/xxx 不存在则创建、存在则在原来的基础上追加
5.3 特殊标准流
0 —— 标准输入
1 —— 标准输出
2 —— 标准错误文件描述符
echo "111111111111" > &1
6.$符号的常见用法
1、$#:表示执行脚本传入参数的个数
2、$*:表示执行脚本传入参数的列表(不包括$0)
3、$$:表示进程的id;Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)
4、$!:Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)
5、$@:表示获取执行脚本传入的所有参数
6、$0:表示执行的脚本名称
7、$1:表示第一个参数
8、$2:表示第二个参数
9、$?:表示脚本执行的状态,0表示正常,其他表示错误