Shell编程中的if分支语句: 伪代码表示: 注意符号和表达式之间的空格;
if [ 表达式1 ]
then分支1
elif [ 表达式2 ]
then分支2
elif [ 表达式3 ]
then分支3
else 其它
fi
按整型的方式,if分支语句比较字符串的大小: 等于:-eq
不等于:-ne
小于:-lt
大于:-gt
小于等于:-le
大于等于:-ge
方括号[ ]内部
逻辑与运算:-a
方括号[ ]外部
逻辑与运算:&&
方括号[ ]内部
逻辑或运算:-o
方括号[ ]外部
逻辑或运算:||
逻辑非运算:!
测试代码:
read - p "请输入数值1:" X
read - p "请输入数值2:" Yif [ $X -gt 0 ] && [ $Y -gt 0 ]
thenecho "两个大于0的数值" if [ $X -eq $Y ] thenecho "$X 等于$Y " elif [ $X -gt $Y ] thenecho "$X 大于$Y " else echo "$X 小于$Y " fi else echo "两个小于或着等于0的数值"
fi
请输入数值1:88
请输入数值2:99
两个大于0的数值
88小于99
请输入数值1:99
请输入数值2:99
两个大于0的数值
99等于99
请输入数值1:99
请输入数值2:88
两个大于0的数值
99大于88
请输入数值1:- 88
请输入数值2:- 99
两个小于或着等于0的数值
if分支语句判断文件的类型: 判断文件是否存在:-e
判断文件是否非空:-s
判断文件是否是块设备文件:-b
判断文件是否是套接字文件:-S
判断文件是否是管道文件:-p
判断文件是否是普通文件:-f
判断文件是否是链接文件:-L
判断文件是否是字符设备文件:-c
判断文件是否是目录文件:-d
特别注意: 判断文件类型时,若文件既是链接文件,又是普通文件时,优先判断链接文件; 测试代码:
read - p "请输入某文件名称:" FEif [ - e $FE ]
thenecho "该文件存在" if [ - s $FE ] thenecho "该文件不是空的" if [ - L $FE ] thenecho "该文件是链接文件" elif [ - f $FE ] thenecho "该文件是普通文件" elif [ - d $FE ] thenecho "该文件是目录文件" fielse echo "该文件是空的" fi
else echo "该文件不存在"
fi
请输入某文件名称:f5. sh
该文件存在
该文件不是空的
该文件是普通文件
if分支语句判断文件的权限: 判断文件是否有读权限:-r
判断文件是否有写权限:-w
判断文件是否有执行权限:-x
特别注意: 判断的是执行脚本者的权限; 测试代码:
read - p "请输入文件名:" FEif [ - r $FE ]
thenecho "有读权限"
else echo "没有读权限"
fiecho "------------------------"
if [ - w $FE ]
thenecho "有写权限"
else echo "没有写权限"
fi
echo "------------------------"
if [ - x $FE ]
thenecho "有执行权限"
else echo "没有执行权限"
fi
请输入文件名:f4. sh
有读权限
-- -- -- -- -- -- -- -- -- -- -- --
有写权限
-- -- -- -- -- -- -- -- -- -- -- --
没有执行权限
if分支语句判断文件的Inode的异同: 所使用的选项:-ef
终端查看Inode
的命令:stat 文件名
特别注意: 不同为假,相同为真; 硬链接
文件Inode一致
;测试代码:
read - p "请输入文件1名称" FE1
read - p "请输入文件2名称" FE2if [ $FE1 - ef $FE2 ]
thenecho "相同" else echo "不同"
fi
请输入文件1名称f1. sh
请输入文件2名称f2. sh
不同
请输入文件1名称f1. sh
请输入文件2名称f1. sh
相同
if分支语句对字符串的判断: 判断字符串是否为空:-z
判断字符串是否为非空:-n
判断字符串是否相等:=
OR ==
判断字符串是否不等:!=
判断字符串是否大小:\<
OR \>
特别注意: 引用字符串时,要加双引号" "
; 测试代码:
read - p "请输入字符串1:" STR1
read - p "请输入字符串2:" STR2if [ - z "$STR1 " ]
thenecho "STR1空" else echo "STR1不空" fiecho "--------------------------" if [ - n "$STR2 " ]
thenecho "STR2不空" else echo "STR2空" fi
echo "--------------------------" if [ "$STR1 " == "$STR2 " ]
thenecho "STR1 = STR2" elif [ "$STR1 " \> "$STR2 " ]
thenecho "STR1 > STR2"
else echo "STR1 < STR2"
fi
请输入字符串1:hello
请输入字符串2:helle
STR1不空
-- -- -- -- -- -- -- -- -- -- -- -- --
STR2不空
-- -- -- -- -- -- -- -- -- -- -- -- --
STR1 > STR2
if分支语句判断文件的时间戳: 判断文件1是否比文件2更新:-nt
判断文件1是否比文件2更旧:-ot
特别注意: 比较的是文件1和文件2的最后一次修改时间; 测试代码:
read - p "输入文件1的文件名:" FE1
read - p "输入文件2的文件名:" FE2if [ $FE1 - nt $FE2 ]
thenecho "文件1比文件2更新"
else echo "文件1比文件2更旧"
fiecho "---------------------------" if [ $FE1 - ot $FE2 ]
thenecho "文件1比文件2更旧"
else echo "文件1比文件2更新"
fi
输入文件1的文件名:f1. sh
输入文件2的文件名:f2. sh
文件1比文件2更旧
-- -- -- -- -- -- -- -- -- -- -- -- -- -
文件1比文件2更旧
输入文件1的文件名:f3. sh
输入文件2的文件名:f2. sh
文件1比文件2更新
-- -- -- -- -- -- -- -- -- -- -- -- -- -
文件1比文件2更新
实例要求: 1.判断当前路径下是否存在名称为dir_DIR的文件
,若存在,输入'Y'
清空,若不存在,自动新建目录文件dir_DIR
; 2.判断当前路径下是否存在名称为file_DIR的文件
,若存在,输入'Y'
清空,若不存在,自动新建目录文件file_DIR
; 3.根据提示信息,输入一个路径,将该路径下普通文件和目录文件进行分类,并且复制到目录文件dir_DIR和file_DIR中,需要统计具体多少个普通文件和多少个目录文件,并列举出所复制的所有文件; 测试代码:
DIR_PATH=$HOME / xxxx/dir_DIR
FILE_PATH=$HOME / xxxx/file_DIRif [ - e $DIR_PATH ]
thenecho "存在dir_DIR文件" read - p "是否清空,请输入[Y/N]>>" Cif [ $C == "Y" ] thenrm - rf $DIR_PATH else echo "退出脚本" exit fifi
echo "新建目录文件dir_DIR"
mkdir $DIR_PATH if [ - e $FILE_PATH ]
thenecho "存在file_DIR文件" read - p "是否清空,请输入[Y/N]>>" Cif [ $C == "Y" ] thenrm - rf $FILE_PATH else echo "退出脚本" exit fifi
echo "新建目录文件file_DIR"
mkdir $FILE_PATH FILE_NUM=0
DIR_NUM=0read - p "请输入一个路径>>" Pafor i in `ls $Pa `
do if [ - f $Pa / $i ] thencp $Pa / $i $FILE_PATH ( ( FILE_NUM++ ) ) elif [ - d $Pa / $i ] thencp - r $Pa / $i $DIR_PATH ( ( DIR_NUM++ ) ) fi
doneecho "-----该路径下的普通文件和目录文件分类已完成-----"
echo "总共复制了 $FILE_NUM 个普通文件"
echo "分别是:"
ls $FILE_PATH
echo "总共复制了 $DIR_NUM 个目录文件"
echo "分别是:"
ls $DIR_PATH
新建目录文件dir_DIR
新建目录文件file_DIR
请输入一个路径>>/ home/linux/xxxx/dir1
-- -- - 该路径下的普通文件和目录文件分类已完成-- -- -
总共复制了 4 个普通文件
分别是:
file1 file2 file3 file4
总共复制了 5 个目录文件
分别是:
dir2 dir3 dir4 dir5 dir6
存在dir_DIR文件
是否清空, 请输入[Y/N] >>Y
新建目录文件dir_DIR
存在file_DIR文件
是否清空, 请输入[Y/N] >>Y
新建目录文件file_DIR
请输入一个路径>>/ home/linux/xxxx/dir1
-- -- - 该路径下的普通文件和目录文件分类已完成-- -- -
总共复制了 4 个普通文件
分别是:
file1 file2 file3 file4
总共复制了 5 个目录文件
分别是:
dir2 dir3 dir4 dir5 dir6