翼度科技»论坛 云主机 LINUX 查看内容

Linux-03shell语法3

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
判断语句

if…then形式


  • 类似于C/C++中的if-else语句。
单层if


  • 命令格式:
  1. if condition
  2. then
  3.     语句1
  4.     语句2
  5.     ...
  6. fi
复制代码

  • 示例:
  1. a=3
  2. b=4
  3. if [ "$a" -lt "$b" ] && [ "$a" -gt 2 ]
  4. then
  5.     echo ${a}在范围内
  6. fi
复制代码

  • 输出结果:
  1. 3在范围内
复制代码
单层if-else


  • 命令格式
  1. if condition
  2. then
  3.     语句1
  4.     语句2
  5.     ...
  6. else
  7.     语句1
  8.     语句2
  9.     ...
  10. fi
复制代码

  • 示例:
  1. a=3
  2. b=4
  3. if ! [ "$a" -lt "$b" ]
  4. then
  5.     echo ${a}不小于${b}
  6. else
  7.     echo ${a}小于${b}
  8. fi
复制代码

  • 输出结果:
  1. 3小于4
复制代码
多层if-elif-elif-else


  • 命令格式
  1. if condition
  2. then
  3.     语句1
  4.     语句2
  5.     ...
  6. elif condition
  7. then
  8.     语句1
  9.     语句2
  10.     ...
  11. elif condition
  12. then
  13.     语句1
  14.     语句2
  15. else
  16.     语句1
  17.     语句2
  18.     ...
  19. fi
复制代码

  • 示例:
  1. a=4
  2. if [ $a -eq 1 ]
  3. then
  4.     echo ${a}等于1
  5. elif [ $a -eq 2 ]
  6. then
  7.     echo ${a}等于2
  8. elif [ $a -eq 3 ]
  9. then
  10.     echo ${a}等于3
  11. else
  12.     echo 其他
  13. fi
复制代码

  • 输出结果:
  1. 其他
复制代码
case…esac形式


  • 类似于C/C++中的switch语句。
  • 命令格式
  1. case $变量名称 in
  2.     值1)
  3.         语句1
  4.         语句2
  5.         ...
  6.         ;;  # 类似于C/C++中的break
  7.     值2)
  8.         语句1
  9.         语句2
  10.         ...
  11.         ;;
  12.     *)  # 类似于C/C++中的default
  13.         语句1
  14.         语句2
  15.         ...
  16.         ;;
  17. esac
复制代码

  • 示例:
  1. a=4
  2. case $a in
  3.     1)
  4.         echo ${a}等于1
  5.         ;;
  6.     2)
  7.         echo ${a}等于2
  8.         ;;
  9.     3)
  10.         echo ${a}等于3
  11.         ;;
  12.     *)
  13.         echo 其他
  14.         ;;
  15. esac
复制代码

  • 输出结果:
  1. 其他
复制代码
循环语句

for…in…do…done


  • 命令格式:
  1. for var in val1 val2 val3
  2. do
  3.     语句1
  4.     语句2
  5.     ...
  6. done
复制代码

  • 示例1,输出a 2 cc,每个元素一行:
  1. for i in a 2 cc
  2. do
  3.     echo $i
  4. done
复制代码

  • 示例2,输出当前路径下的所有文件名,每个文件名一行:
  1. for file in `ls`
  2. do
  3.     echo $file
  4. done
复制代码

  • 示例3,输出1-10
  1. for i in $(seq 1 10)
  2. do
  3.     echo $i
  4. done
复制代码

  • 示例4,使用{1..10} 或者
  1. for i in {a..z}
  2. do
  3.     echo $i
  4. done
复制代码
for ((…;…;…)) do…done


  • 命令格式:
  1. for ((expression; condition; expression))
  2. do
  3.     语句1
  4.     语句2
  5. done
复制代码

  • 示例,输出1-10,每个数占一行:
  1. for ((i=1; i<=10; i++))
  2. do
  3.     echo $i
  4. done
复制代码
同时重定向stdin和stdout


  • 创建bash脚本:
  1. while condition
  2. do
  3.     语句1
  4.     语句2
  5.     ...
  6. done
复制代码

  • 创建input.txt,里面的内容为:
  1. while read name
  2. do
  3.     echo $name
  4. done
复制代码

  • 执行命令:
  1. until condition
  2. do
  3.     语句1
  4.     语句2
  5.     ...
  6. done
复制代码
引入外部脚本

概述


  • 类似于C/C++中的include操作,bash也可以引入其他文件中的代码。
  • 语法格式:
  1. until [ "${word}" == "yes" ] || [ "${word}" == "YES" ]
  2. do
  3.     read -p "Please input yes/YES to stop this program: " word
  4. done
复制代码
示例


  • 创建test1.sh,内容为:
  1. while read name
  2. do
  3.     for ((i=1;i<=10;i++))
  4.     do
  5.         case $i in
  6.             8)
  7.                 break
  8.                 ;;
  9.             *)
  10.                 echo $i
  11.                 ;;
  12.         esac
  13.     done
  14. done
复制代码

  • 然后创建test2.sh,内容为:
  1. for ((i=1;i<=10;i++))
  2. do
  3.     if [ `expr $i % 2` -eq 0 ]
  4.     then
  5.         continue
  6.     fi
  7.     echo $i
  8. done
复制代码

  • 执行命令:
  1. [function] func_name() {  # function关键字可以省略
  2.     语句1
  3.     语句2
  4.     ...
  5. }
复制代码
来源:[url=https://www.cnblogs.com/han-fei/p/178926while read name
do
    echo $name
done.html]https://www.cnblogs.com/han-fei/p/178926while read name
do
    echo $name
done.html[/url]
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具