Shell编程之条件语句

条件测试操作

在Shell编程中,条件语句(如if、elif、else)用于基于某个条件的结果来执行不同的代码块。为了测试这些条件,Shell提供了多种条件测试操作。

以下是Shell编程中常用的条件测试操作:

测试字符串

-z STRING:如果STRING的长度为零,则为真。

-n STRING 或 STRING:如果STRING的长度非零,则为真。

STRING1 = STRING2 或 STRING1 == STRING2:如果两个字符串相同,则为真。

STRING1 != STRING2:如果两个字符串不同,则为真。

测试整数

-eq:等于。

-ne:不等于。

-gt:大于。

-ge:大于或等于。

-lt:小于。

-le:小于或等于。

例如:if [ $a -eq $b ]

文件测试

-e FILE:如果文件存在,则为真。

-f FILE:如果文件是一个普通文件(不是目录或设备文件),则为真。

-s FILE:如果文件大小非零,则为真。

-d FILE:如果文件是一个目录,则为真。

-r FILE:如果文件可读,则为真。

-w FILE:如果文件可写,则为真。

-x FILE:如果文件可执行,则为真。

-L FILE 或 -h FILE:如果文件是一个符号链接,则为真。

例如:if [ -e /path/to/file ]

复合条件测试

! EXPRESSION:如果EXPRESSION为假,则为真。

EXPRESSION1 -a EXPRESSION2 或 EXPRESSION1 && EXPRESSION2:两个表达式都为真时,结果为真。

EXPRESSION1 -o EXPRESSION2 或 EXPRESSION1 || EXPRESSION2:两个表达式中至少有一个为真时,结果为真。

注意:在[ ]中的表达式两边应有空格,否则可能会出错。另外,-a和-o在某些shell(如bash)中可能不被推荐,而建议使用&&和||来进行逻辑与和逻辑或操作。

示例:

bash复制代码#!/bin/bash a=5 b=10 if [ $a -lt $b ]; then echo "a is less than b" elif [ $a -eq $b ]; then echo "a is equal to b" else echo "a is greater than b" fi if [ -e /path/to/file ]; then echo "File exists" else echo "File does not exist" fi

if 条件语句

在Shell编程中,if 条件语句用于基于某个条件的结果来执行相应的代码块。如果条件为真(即返回值为0),则执行then后面的代码块;如果条件为假(即返回值非0),则可以选择性地执行else或elif(即“else if”)后面的代码块。

以下是一个if条件语句的基本结构:

bash复制代码if [ CONDITION ] then # 如果条件为真时执行的代码 else # 如果条件为假时执行的代码 fi

或者,如果你有多个条件要检查,可以使用elif:

bash复制代码if [ CONDITION1 ] then # 如果条件1为真时执行的代码 elif [ CONDITION2 ] then # 如果条件1为假但条件2为真时执行的代码 else # 如果所有条件都为假时执行的代码 fi

在[ ]中,你可以使用上面提到的各种测试条件,如字符串测试、整数测试、文件测试等。记住,在[ ]内部的两边都需要有空格,这是Shell语法的要求。

以下是一些示例:

示例 1:检查两个整数的大小

bash复制代码#!/bin/bash a=5 b=10 if [ $a -lt $b ] then echo "$a is less than $b" elif [ $a -eq $b ] then echo "$a is equal to $b" else echo "$a is greater than $b" fi

示例 2:检查文件是否存在

bash复制代码#!/bin/bash FILE="/path/to/some/file.txt" if [ -e "$FILE" ] then echo "File $FILE exists" else echo "File $FILE does not exist" fi

注意在示例2中,我使用了双引号来包围变量$FILE。这是一个好习惯,因为它可以防止文件名中包含空格或特殊字符时导致的问题。

另外,你还可以使用(( ))来进行算术比较,这是bash特有的语法,它不需要在比较运算符前后加空格:

示例 3:使用(( ))进行算术比较

bash复制代码#!/bin/bash a=5 b=10 if (( a < b )) then echo "$a is less than $b" fi

case 分支语

在Shell编程中,case语句用于多路分支,它允许根据一个变量的值来执行不同的代码块。case语句在结构上类似于其他编程语言中的switch语句。

以下是case语句的基本语法:

bash复制代码case VARIABLE in PATTERN1) # 如果VARIABLE的值匹配PATTERN1,则执行这里的代码 ;; PATTERN2) # 如果VARIABLE的值匹配PATTERN2,则执行这里的代码 ;; # ... 可以有更多的模式 *) # 如果VARIABLE的值不匹配任何模式,则执行这里的代码(默认情况) ;; esac

注意以下几点:

每个模式后面都需要用)闭合。

每个模式匹配的代码块后面需要用;;来终止。

*是一个通配符,用于匹配任何值(类似于其他编程语言中的default)。

以下是一个case语句的示例:

bash复制代码#!/bin/bash # 假设我们有一个变量day,它包含了星期几的名字 day="Monday" case $day in Monday) echo "Today is Monday." ;; Tuesday|Wednesday|Thursday|Friday) echo "Today is a weekday." ;; Saturday|Sunday) echo "Today is a weekend." ;; *) echo "Invalid day: $day" ;; esac

在这个示例中,我们根据变量day的值来输出不同的消息。如果day是"Monday",则输出"Today is Monday.";如果day是"Tuesday"、"Wednesday"、"Thursday"或"Friday"中的任何一个,则输出"Today is a weekday.";如果day是"Saturday"或"Sunday",则输出"Today is a weekend.";如果day的值不匹配任何模式,则输出"Invalid day: $day"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值