[ linux-003 ] if的常见用法(1)

205 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第20天,点击查看活动详情

本章节介绍shell脚本中,if的常见用法,平时也会经常用到

字符串比较

等于,如:if [ a=a = b ]或if [ a==a == b ],与=等价

不等于,如:if [ a!=a != b ]

大于,在ASCII字母顺序下.如:if [ aa \> b ]

小于,在ASCII字母顺序下.如:if [ a\<a \< 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组件,这样也能起到对脚本进行检查的作用。多写一些就会了,多用一下就熟练了