Linux 第四篇 shell编程,逻辑控制

Yvonne ·
更新时间:2024-09-20
· 619 次阅读

上一篇:https://blog.csdn.net/jiachanghui007/article/details/105616317

讲过上一篇的shell介绍,相信对shell有了最基本的认识。本篇主要介绍分支控制,循环控制语法。

在此之前,先提两个shell变量的注意点:

①变量赋值时,“=”左右两边不能有空格;

②BASH中的语句结尾不需要分号;

 

分支控制,基本结构:

if[expression]

then

    #code block

fi

 

if[expression]

then

    #code block

else

    #code block

fi

 

if [expression]

then

    #code block

else if [expression]

then

    #code block

else

    #code block

 fi

fi

注意:else if 和 elif 等价;每个if对应一个fi

比较:

比较操作

整数操作

字符串操作

相同

-eq

=

不同

-ne

!=

大于

-gt

>

小于

-lt

<

大于或等于

-ge

 

小于或等于

-le

 

为空

-z

 

不为空

-n

 

例如:比较整数a和b是否相等: if [ $a = $a ]

      判断整数a是否大于整数b: if [ $a -gt $b ]

                                 if [ $a > $b ]

注意:1、在“[”和“]”符号的左右都留有空格;

“=”左右都有空格;

 

判断

-e 文件已经存在

-f 文件是普通文件

-s 文件大小不为零

-d 文件是一个目录

-r 文件对当前用户可以读取

-w 文件对当前用户可以写入

-x 文件对当前用户可以执行

例:test5

#!/bin/sh

folder=/home

[ -r “$folder” ] && echo “can read $folder”

[ -f “$folder” ] || echo “this is not file”

 

For循环

for循环结构与C语言中有所不同,在BASH中for循环的基本结构是:

for var in [list]

do

  #code block

done

其中$var是循环控制变量,[list]是var主要遍历的一个集合,do/done对包含了循环体,相当与C语言中的一对大括号。另外如果do和for被写在同一行,必须在do前面加上”;”。如: for $var in [list] ;do

例:test6

#!/bin/bash

for day in Sun Mon Tue Wed Thu Fri Sat

do

   echo  $day

done

如果列表被包含在一对双引号中,则被认为是一个元素。如test8:

#!/bin/bash

for day in “Sun Mon Tue Wed Thu Fri Sat”

do

   echo  $day

done

 

For循环(注意):

上面的例子中,在for所在的那行,变量day是没有加”$”符合的,而在循环体内,echo所在行变量$day是必须要加上“$”符合的。

 

while循环

基本结构:

while [ condition ]

do

  #code block

done

 

until循环

基本结构

until [ condition ]

 do

   #code block

done

 

while 和 until 的区别:

while 和 until 的区别在于 while是为真时执行,until是为假时执行。

 

case语句:

基本结构:

case “$var” in

  condition 1)

        ;;

  condition 2)

        ;;

  *)

  default  statments;;

esac

 

例 test7:

#!/bin/bash

echo “Hit a key,then hit return.”

read keypress

case “$keypress” in

[ A-Z ]) echo “Uppercase letter”;;

[ a-z ]) echo “Lowercase letter”;;

[ 0-9 ]) echo “Digit”;;

*) echo “Punctuation,whitespase,or other”

esac

 

以上就是基本的控制逻辑语法。内容都是手敲的。感兴趣自己实验。如有问题,欢迎私聊或留言!

 

 


作者:jiachanghui007



shell编程 shell Linux

需要 登录 后方可回复, 如果你还没有账号请 注册新账号