季更43/90

2022-04-21 14:55:16 浏览数 (1)

编程随想

Bash 条件判断

if语句

代码语言:javascript复制
if commands; then
commands
[elif commands; then  commands...]
[else  commands]
fi

if结构的判断条件,一般使用test命令,有三种形式。

代码语言:javascript复制
# 写法一
test expression
# 写法二
[ expression ]
# 写法三
[[ expression ]]
//上面三种形式是等价的,但是第三种形式还支持正则判断,前两种不支持。
//注意,第二种和第三种写法,[和]与内部的表达式之间必须有空格。

文件判断

代码语言:javascript复制
[ -a file ]:如果 file 存在,则为true。
[ -d file ]:如果 file 存在并且是一个目录,则为true。
[ -e file ]:如果 file 存在,则为true。
[ -w file ]:如果 file 存在并且可写(当前用户拥有可写权限),则为true。
[ -x file ]:如果 file 存在并且可执行(有效用户有执行/搜索权限),则为true。

字符串判断

代码语言:javascript复制
[ string ]:如果string不为空(长度大于0),则判断为真。
[ -n string ]:如果字符串string的长度大于零,则判断为真。
[ -z string ]:如果字符串string的长度为零,则判断为真
[ string1 = string2 ]:如果string1和string2相同,则判断为真。
[ string1 == string2 ] 等同于[ string1 = string2 ]。
[ string1 != string2 ]:如果string1和string2不相同,则判断为真。
[ string1 '>' string2 ]:如果按照字典顺序string1排列在string2之后,则判断为真。
[ string1 '<' string2 ]:如果按照字典顺序string1排列在string2之前,则判断为真。
//注意,test命令内部的>和<,必须用引号引起来(或者是用反斜杠转义)。否则,它们会被 shell 解释为重定向操作符。

整数判断

代码语言:javascript复制
[ integer1 -eq integer2 ]:如果integer1等于integer2,则为true。
[ integer1 -ne integer2 ]:如果integer1不等于integer2,则为true。
[ integer1 -le integer2 ]:如果integer1小于或等于integer2,则为true。
[ integer1 -lt integer2 ]:如果integer1小于integer2,则为true。
[ integer1 -ge integer2 ]:如果integer1大于或等于integer2,则为true。
[ integer1 -gt integer2 ]:如果integer1大于integer2,则为true。

正则判断

代码语言:javascript复制
[[ string1 =~ regex ]] //regex是一个正则表示式,=~是正则比较运算符。

逻辑运算

代码语言:javascript复制
AND运算:符号&&,也可使用参数-a。
OR运算:符号||,也可使用参数-o。
NOT运算:符号!。

算术判断

代码语言:javascript复制
((...))作为算术条件,进行算术运算的判断。
if ((3 > 2)); then
  echo "true"
fi
//算术判断不需要使用test命令,而是直接使用((...))结构。这个结构的返回值,决定了判断的真伪。
//如果算术计算的结果是非零值,则表示判断成立。这一点跟命令的返回值正好相反,需要小心。

case结构

代码语言:javascript复制
case expression in
  pattern )
    commands ;;
  pattern )
    commands ;;
  ...
esac

0 人点赞