shell脚本和编程(二) | 青训营笔记

139 阅读3分钟

shell脚本和编程(二)

在shell脚本中,可以使用条件判断命令来根据条件的真假执行不同的操作。常见的条件判断命令包括if、case和test。

if语句:if语句根据条件的真假执行不同的操作。它的语法如下:

if [ condition ]; then commands elif [ condition ]; then commands else commands fi 其中,condition表示需要判断的条件,可以是表达式、字符串或文件等;then后面是需要执行的操作,可以是单个命令或一组命令,多个命令用分号或换行符分隔;elif语句和else语句是可选的。

case语句:case语句根据输入值匹配不同的模式,执行与模式相关联的操作。它的语法如下:

case expression in pattern1) commands;; pattern2) commands;; ... *) fallback commands;; esac 其中,expression是需要匹配的值,in后面是多个模式匹配,每个模式用括号括起来,后面跟着需要执行的操作;最后一个模式 * 则是fallback模式,当没有其他模式匹配时执行的操作。

test命令:test命令用于测试文件或字符串的属性或状态,并返回一个true或false的结果。它的语法如下:

test condition 或者

[ condition ] 其中,condition是需要测试的条件,可以是文件操作、字符串比较等,具体参见test命令的帮助文档。通常用if语句和test命令一起判断条件是否成立。例如:

if [ -e "file"];thenecho"file" ]; then echo "file exists." else echo "$file does not exist." fi 上面的例子判断文件是否存在,如果存在,则输出提示信息,否则输出另外的提示信息。

在shell脚本中,常见的循环语句有for和while。

  1. for循环:for循环根据给定的列表或范围,遍历其中的元素或数字,执行指定的命令。它的语法如下:

    for variable in list
    do
        commands
    done
    

    其中,variable是循环变量,在每次循环中取遍list中的元素;list是需要遍历的列表或范围;do和done之间是需要执行的命令。例如:

    for i in {1..10}; do
        echo "$i"
    done
    
    for file in *.txt; do
        echo "$file"
    done
    

    上面的例子分别遍历数字范围和文件列表,输出每个元素的值。

  2. while循环:while循环根据条件的真假执行循环,直到条件为假时停止循环。它的语法如下:

    while condition
    do
        commands
    done
    

    其中,condition是需要测试的条件,如果条件为真,则执行do和done之间的命令。例如:

    count=0
    while [ $count -lt 10 ];
    do
        echo "$count"
        count=$(expr $count + 1)
    done
    

    上面的例子使用while循环输出0到9的数字。

  3. until循环:与while循环类似,但是它在条件为假时继续执行循环,直到条件为真时停止循环。它的语法如下:

    until condition
    do
        commands
    done
    

    其中,condition是需要测试的条件,如果条件为假,则执行do和done之间的命令。例如:

    count=0
    until [ $count -eq 10 ];
    do
        echo "$count"
        count=$(expr $count + 1)
    done
    

    上面的例子使用until循环输出0到9的数字。

在循环过程中,可以使用break和continue语句控制循环的执行。break语句用于中断循环,continue语句用于跳过当前循环。例如:

for i in {1..10}; do
    if [ $i -eq 5 ]; then
        break
    elif [ $i -eq 3 ]; then
        continue
    else
        echo "$i"
    fi
done

上面的例子遍历数字范围,当循环变量i等于5时中断循环,当循环变量i等于3时跳过当前循环,输出其他数字。

在shell中,展开(Expansions)是将特定字符序列扩展为文件名、参数列表或其他字符串的过程。常见的展开包括:变量展开、波浪号展开、花括号展开、命令替换、算术展开和通配符展开。

变量展开:使用 $ 符号来展开变量名为变量的值。例如:

var="hello world" echo $var 上面的例子输出变量var的值 “hello world”。

波浪号展开:用波浪号 (~) 来展开当前用户的主目录。例如:

echo ~ 上面的例子输出当前用户的主目录。

花括号展开:使用花括号来生成类似于枚举的列表。例如:

echo {a,b,c,d} 上面的例子输出 “a b c d”。

命令替换:使用反引号(``)或者 $() 来展开命令。例如:

echo ls echo $(date) 上面的例子第一个命令输出当前目录下的文件列表,第二个命令输出当前日期。

算术展开:使用双括号 (( )) 来进行算术扩展。例如:

i=10 echo $((i+5)) 上面的例子将变量 i 加上 5 并输出结果 15。

通配符展开:使用通配符来展开匹配的文件或目录名称。例如:

echo /path/to/files/*.txt 上面的例子将展开路径 /path/to/files 中所有 .txt 结尾的文件,输出匹配的文件名。

展开在shell编程中是一个非常强大和灵活的特性,可以帮助我们简化代码并提高代码的可读性和可维护性。