02 条件判断和循环命令

102 阅读1分钟

02 条件判断和循环命令

条件判断的基本用法

# 判断命令是否成功执行
if pwd
then
  	echo "成功执行 pwd 命令"
else
  	echo "pwd 命令执行失败"
fi

if grep "root" /etc/passwd > /dev/null && grep "mail" /etc/passwd > /dev/null
then
        echo "root 用户和 mail 用户都存在"
        if test -r /home/root || test -r /home/mail
        then
                echo "home 目录下可能存在 root 和 mail 同名主目录"
        else
                echo "home 目录下不存在 root 和 mail 同名主目录"
        fi
fi

# 数值比较。注意括号内容和括号之间必须存在空格
var=10
if [ $var -gt 5 ] # -ge 为大于等于
then
    echo "值大于5"
if [ $var -eq 5 ]
then
    echo "值等于5"
if [ $var -lt 5 ] # -le 为小于等于
then
    echo "值小于5"
if [ $var -ne 5 ]
then
    echo "值不等于5"

# -z 判断字符串是否为空
# -n 判断字符串是否不为空
testuser=''
if [ -z $testuser ]
then
     echo "字符串为空"
elif [ $testuser = zhangsan ]
then
    echo "字符串的值是 zhangsan"
elif [ $testuser != zhangsan ]
then
    echo "字符串的值不是 zhangsan"
fi

循环命令的基本用法

  1. 循环读取值

    #!/bin/bash
    list=aaa bbb ccc "New York"
    for item in $list 
    do
        echo "$item" # New York 会被分开输出
    done
    item=ddd # shell 中声明的变量都是全局变量,使用 local 关键字定义局部变量:local item=ddd
    echo "$item"
    
    # 查询内容并输出到其他文件中
    getList=$( head -n1 /etc/passwd | grep root  )
    echo $getList
    for list in $getList
    do
        IFS=: # 循环默认以空格作为分隔符,使用 IFS 可将分隔符改为“:”
        for item in $list
        do
            echo $item
        done
    done>output.txt # 将内容覆盖保存到文件中
    
    # 循环创建文件夹
    for i in {1..5}
    do
        mkdir -p /opt/dir$i
    done
    
  2. 循环判断目录下的文件类型

    #!/bin/bash
    # iterate through all the files in a directory
    
    for file in /home/rich/test/*
    do
    
       if [ -d "$file" ]
       then
          echo "$file is a directory"
       elif [ -f "$file" ]
       then
          echo "$file is a file"
       fi
    done
    

  1. C语言风格的 for 循环

    j=0
    for (( i=0;i<=100;i++ ))
    do
      
        j=$(( j+i )) # j=$[ $j+$i ] 注意二者的区别
    done
    echo $j
    

  1. while 循环展示

    var1=10
    while [ $var1 -gt 0 ]
    do
       echo $var1
       var1=$[ $var1 - 1 ]
    done