{"msg":"操作成功","code":200,"data":{"createBy":"admin","createTime":"2021-01-19 15:31:05","updateBy":"admin","updateTime":"2025-06-16 20:17:19","remark":null,"id":44,"articleTitle":"Shell（三）运算与条件判断","articleUrl":"shell_cacl_condition","articleThumbnail":"https://www.asumimoe.com/imgfiles/20220908/7769fde9ec5445068e41583cb1c71894.jpg","articleFlag":"0","draftStatus":"1","reprintStatement":"1","articleSummary":"shell中无法直接使用加减乘除等运算符来进行运算，需要用`expr`命令来进行运算。条件判断通常是流程控制的主要依据。","articleContent":"## 运算\n\nshell中无法直接使用加减乘除等运算符来进行运算，需要用`expr`命令来进行运算。\n\n```bash\n[root@l1 ~]# expr 1 + 2 #两个数字与加号之间必须有空格，相当于将这三个字符作为变量传入expr命令\n3\n[root@l1 ~]# expr 2 \\* 3 #乘法运算需要将乘号转义\n6\n```\n\n或者使用两个括号或一个中括号来进行运算。\n\n```bash\n[root@l1 ~]# echo $((1+3))\n4\n[root@l1 ~]# echo $((2*3))\n6\n[root@l1 ~]# echo $((2 * 3)) #中间可以带空格\n6\n```\n\n将`expr`的运算结果赋值给一个变量需要用到反引号或者$()。获取其他命令的输出结果也同样适用。\n\n```bash\n[root@l1 ~]# a=$(expr 1 + 2)\n[root@l1 ~]# echo $a\n3\n[root@l1 ~]# a=`expr 2 \\* 3`\n[root@l1 ~]# echo $a\n6\n```\n\n## 条件判断\n\n用法：\n\n1. test condition\n\n   ```bash\n   [root@l1 ~]# a=hello\n   [root@l1 ~]# test $a = hello\n   [root@l1 ~]# echo $?\n   0\n   [root@l1 ~]# test $a = hell\n   [root@l1 ~]# echo $?\n   1\n   ```\n\n2. [ condition ]，condition两边要有空格，运算符两边也要有空格\n\n   ```bash\n   [root@l1 ~]# [ $a = hello ]\n   [root@l1 ~]# echo $?\n   0\n   [root@l1 ~]# [ $a = hell ]\n   [root@l1 ~]# echo $?\n   1\n   ```\n\n## 运算符表达式\n\n### 1.整数比较符\n\n```bash\n-eq：equal，相等\n-ne：not equal，不相等\n-lt：lesser than，小于\n-gt：greater than，大于\n-le：greater or equal，小于等于\n-ge：lesser or equal，大于等于\n中括号中的表达式必须要以此为判断符，而在双小括号中才可以使用数学上的<>=+-/*等运算符\n```\n\n### 2.字符串比较符\n\n```bash\n==：判断两个字符串是否相等\n!=：判断两个字符串是否不相等\n-n：字符串长度不等于0为真\n-z：字符串长度等于0为真\nstr：字符串存在为真\n使用-z或-n判断字符串长度时，变量需要加双引号。\n字符串比较中的> < >= <= 这四种运算符一般是根据ASCII码表中的顺序进行比较，不常用。\n```\n\n### 3.布尔运算符\n\n```bash\n！：取反\n-a：&& 和\n-o：|| 或\n布尔运算符通常用在[   ]条件判断中\n多条件判断[ $a -lt 35 -a $a -gt 18 ]\n```\n\n### 4.逻辑判断符\n\n```bash\n&&：逻辑和，前面的命令执行成功就会执行后面的命令\n||：逻辑或，前面的命令执行失败就会执行后面的命令\n逻辑判断符在[[ ]]和(( ))表达式中使用，表示多条件判断 [ $a -lt 35 ] && [ $a -gt 18 ]\n```\n\n### 5.文件测试\n\n```bash\n-e：文件或目录存在为真 \n-f：文件存在为真\n-d：目录存在为真\n-r：有读权限为真\n-w：有写权限为真\n-x：有执行权限为真\n-s：文件存在并且大小大于0为真\n```\n\n","categoryId":5,"viewCount":670,"categoryName":"Shell","author":"球接子","authorAvatar":null,"tagIds":[4,10],"tagNames":["Shell","Linux基础"]}}