一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第20天,点击查看活动详情。
本章节介绍shell脚本中,if的常见用法,平时也会经常用到
字符串比较
等于,如:if [ b ]或if [ b ],与=等价
不等于,如:if [ b ]
大于,在ASCII字母顺序下.如:if [ b ]
小于,在ASCII字母顺序下.如:if [ b ] 注意:要使用转义符“\”。
字符串包含
strA="helloworld"
strB="low"
if [[ $strA =~ $strB ]]
then
echo "包含"
else
echo "不包含"
fi
文件为空
if [ -s $1 ] ; then
echo 'ths file is not empyt and file info:'
du -sh $1
else
echo 'empty!'
fi
if [ ! -s $1 ] ; then
echo 'empty'
else
echo 'not empty!'
fi
字符串相等
echo dump_file_name=$dump_file_name
echo dump_file_type=${dump_file_name##*.}
只是echo打印了,并未进行赋值
echo ${#dump_file_type} 打印长度为0
多条件判断
if [[ $mysql_user = "" ]]||[[ $mysql_passwd = "" ]];then
-o = or , -a = and , 但我一向只用 || 或者 &&
其他参数
–b 当file存在并且是块文件时返回真
-c 当file存在并且是字符文件时返回真
-d 当pathname存在并且是一个目录时返回真
-e 当pathname指定的文件或目录存在时返回真
-f 当file存在并且是正规文件时返回真
-g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
-h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
-k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
-p 当file存在并且是命令管道时返回为真
-r 当由pathname指定的文件或目录存在并且可读时返回为真
-s 当file存在文件大小大于0时返回真
-u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
-w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
-o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。
总结
if 语句的写法比较苛刻,多一个或者少一个字符,可能都会导致判断无法运行,所以建议,写的时候也尽量多留空格,用双中括号代替单中括号,虽然多写了点内容,但更能保证脚本的顺利运行。写的时候可以安装shellcheck组件,这样也能起到对脚本进行检查的作用。多写一些就会了,多用一下就熟练了