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 exists." else echo "$file does not exist." fi 上面的例子判断文件是否存在,如果存在,则输出提示信息,否则输出另外的提示信息。
在shell脚本中,常见的循环语句有for和while。
-
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上面的例子分别遍历数字范围和文件列表,输出每个元素的值。
-
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的数字。
-
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编程中是一个非常强大和灵活的特性,可以帮助我们简化代码并提高代码的可读性和可维护性。