Shell根据命令执行的返回状态值$?来判断是否执行成功,当返回值是表示成功,非0表示失败或者异常,逻辑判断的表示方法是如下,需要注意的方括号和条件表达式之间需要至少一个空格间隔开

  1. [ 条件表达式 ]

文件判断

操作符 作用
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行

判读/etc/yum这个目录文件是否存在,通过变量$?的值可以判断前一步的条件结果

[baxiang@centos7 ~]$ [ -d /etc/yum ]
[baxiang@centos7 ~]$ echo $?
0

比较判断

操作符 作用
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于

if条件

if条件语句的单分支结构由if、then、fi关键词组成,而且只在条件成立后才执行预设的命令。fi 是 if 的反转写法,表示“if 语句结束”。then 是英语“那么”的意思。expression 和方括号([ ])之间必须有空格,否则会有语法错误。

单分支结构

语法

if [ expression ]
then
   Statement(s) to be executed if expression is true
fi

或者

if [ expression ]; then
   Statement(s) to be executed if expression is true
fi

上文的“expression”部分可以是test、[]、[[]]、(())等条件表达式,甚至可以直接使用命令作为条件表达式。每个if条件语句都以if开头,并带有then,最后以fi结尾。
eg:

DIR=/root/test
if [ ! -d $DIR ]
then
mkdir -p $DIR
fi

双分支结构

if条件语句的双分支结构由if、then、else、fi关键词组成,它进行一次条件匹配判断,如果与条件匹配,则去执行相应的预设命令;反之则去执行不匹配时的预设命令,

if 条件测试语句
then
  命令语句1
else
 命令语句2
fi

eg:

if [  ! -d ./test/ ]
then
    mkdir ./test/ #不存在就创建
else
   rm -rf ./test  #存在的就删除
fi

多分支结构

语法如下:

if 条件测试操作
then
 命令语句1
elif 条件测试语句2
then 
 命令语句2
else
  命令语句3
fi

循环

for

for 变量 in 列表
do
    command1
    command2
    ...
    commandN
done

获取当前目录下所有的文件

for FILE in $(ls)
do
  echo $FILE
done

输出字符串

#!/usr/bin/env bash

for str in 'string content'
do
    echo $str
done

while

while command
do
   Statement(s) to be executed if command is true
done

case

case条件语句的语法格式为
image.png

当变量的值等于值1时,执行指令1;等于值2时执行指令2,以此类推;如果都不符合,则执行“*)”后面的指令,即指令3。此外,注意不同行内容的缩进距离。

eg

#! /bin/bash
case $1 in
1)
  echo 1
  ;;
2)
 echo 2
 ;;
*)
 echo $1
esac