Shell 条件判断总结

一些条件判断 总结

-b file 若文件存在且是一个块特殊文件,则为真
-c file 若文件存在且是一个字符特殊文件,则为真
-d file 若文件存在且是一个目录,则为真
-e file 若文件存在,则为真
-f file 若文件存在且是一个规则文件,则为真
-g file 若文件存在且设置了SGID位的值,则为真
-h file 若文件存在且为一个符合链接,则为真
-k file 若文件存在且设置了"sticky"位的值
-p file 若文件存在且为一已命名管道,则为真
-r file 若文件存在且可读,则为真
-s file 若文件存在且其大小大于零,则为真
-u file 若文件存在且设置了SUID位,则为真
-w file 若文件存在且可写,则为真
-x file 若文件存在且可执行,则为真
-o file 若文件存在且被有效用户ID所拥有,则为真

-z string 若string长度为0,则为真
-n string 若string长度不为0,则为真
string1 = string2 若两个字符串相等,则为真
string1 != string2 若两个字符串不相等,则为真

int1 -eq int2 若int1等于int2,则为真
int1 -ne int2 若int1不等于int2,则为真
int1 -lt int2 若int1小于int2,则为真
int1 -le int2 若int1小于等于int2,则为真
int1 -gt int2 若int1大于int2,则为真
int1 -ge int2 若int1大于等于int2,则为真

!expr 若expr为假则复合表达式为真。expr可以是任何有效的测试表达式
expr1 -a expr2 若expr1和expr2都为真则整式为真
expr1 -o expr2 若expr1和expr2有一个为真则整式为真

特殊变量

$0 正在被执行命令的名字。对于shell脚本而言,这是被激活命令的路径
$n 该变量与脚本被激活时所带的参数相对应。n是正整数,与参数位置相对应($1,$2...)
$# 提供脚本的参数号
$* 所有这些参数都被双引号引住。若一个脚本接收两个参数,$*等于$1$2
$@ 所有这些参数都分别被双引号引住。若一个脚本接收到两个参数,$@等价于$1$2
$? 前一个命令执行后的退出状态
$$ 当前shell的进程号。对于shell脚本,这是其正在执行时的进程ID
$! 前一个后台命令的进程号


转载自:
http://blog.chinaunix.net/u1/35548/showart_369517.html
<think>嗯,用户想了解如何在Shell脚本中使用条件判断语句。首先,我得回忆一下Shell脚本条件判断结构。记得基本语法是if...then...fi,还有test命令或者方括号[]来做条件判断。对了,用户提到的引用里提到了test命令返回状态值,0表示成立,非0则不成立。这点很重要。 然后,用户可能对基本语法不太清楚,需要详细说明。比如if语句的结构,elif和else的用法。还有条件判断的类型,比如字符串比较、数值比较、文件测试等。引用中的资料提到,中括号和条件之间必须有空格,这点容易出错,必须强调。 接下来,实际应用例子可能会有帮助。用户可能想知道如何比较字符串,比如判断变量是否等于某个值,或者检查文件是否存在。比如使用-z判断字符串是否为空,或者-e检查文件是否存在。可能需要举几个例子,比如检查文件是否存在,或者比较两个数字的大小。 另外,逻辑操作符如-a(与)、-o(或)也很重要,还有在双括号中的逻辑运算符&&和||。用户可能对何时使用单中括号和双中括号有疑问,需要解释清楚。 还要注意,Shell脚本中的条件判断和常见编程语言有所不同,比如fi作为结束符,而不是大括号。这点容易被忽略,需要特别指出。引用中的资料也提到,then的位置和分号的使用,如果换行就不用分号,否则需要分号分隔。 可能还需要提到case语句,作为多条件分支的另一种方式。比如根据不同的参数执行不同的代码块。虽然用户主要问的是if语句,但case也是条件判断的一部分,可以简要介绍。 最后,用户可能在实际使用中遇到问题,比如空格缺失导致语法错误,或者比较运算符用错。应该提醒常见错误和调试方法,比如使用echo输出变量值,或者检查返回状态码。 总结一下,回答需要覆盖基本语法、条件类型、逻辑操作符、实际例子、常见错误和case语句。同时按照用户的要求,使用正确的LaTeX格式,比如行内公式用$...$,独立公式用$$...$$,不过这里可能用不上数学公式,但要注意其他格式要求。确保引用标识正确,比如引用中的test命令和语法要点。</think>### Shell脚本中的条件判断语句用法详解 在Shell脚本中,条件判断主要通过`if`语句实现,结合`test`命令或方括号`[ ]`进行条件测试。以下是关键知识点和用法: --- #### 一、基本语法结构 1. **单条件判断** ```bash if [ 条件 ]; then # 条件成立时执行的代码 fi ``` 示例:检查文件是否存在 ```bash if [ -e "/path/to/file" ]; then echo "文件存在" fi ``` 2. **多条件分支** ```bash if [ 条件1 ]; then # 条件1成立时执行 elif [ 条件2 ]; then # 条件2成立时执行 else # 其他情况执行 fi ``` 示例:比较数值大小 ```bash a=10 if [ $a -gt 20 ]; then echo "a大于20" elif [ $a -lt 5 ]; then echo "a小于5" else echo "a在5到20之间" fi ``` --- #### 二、条件测试类型 1. **文件测试** 使用`-e`、`-d`、`-f`等参数检查文件属性,例如: - `-e 文件名`:文件是否存在[^4] - `-d 目录名`:是否为目录 ```bash if [ -d "/tmp" ]; then echo "/tmp是目录" fi ``` 2. **字符串比较** - `=`:字符串相等 - `!=`:字符串不等 - `-z`:字符串为空 ```bash str="hello" if [ "$str" = "hello" ]; then echo "字符串匹配" fi ``` 3. **数值比较** - `-eq`:等于 - `-ne`:不等于 - `-gt`:大于 - `-lt`:小于 ```bash if [ $num1 -gt $num2 ]; then echo "num1大于num2" fi ``` 4. **逻辑操作符** - `-a`:逻辑与(AND) - `-o`:逻辑或(OR) - `!`:逻辑非(NOT) ```bash if [ $age -gt 18 -a $age -lt 60 ]; then echo "年龄在18到60之间" fi ``` --- #### 三、高级用法 1. **双括号`(( ))`** 支持数学表达式,例如: ```bash if (( $a + $b > 100 )); then echo "a + b大于100" fi ``` 2. **双方括号`[[ ]]`** 支持模式匹配和正则表达式: ```bash if [[ "$str" == h* ]]; then echo "字符串以h开头" fi ``` 3. **case语句** 多条件分支时更简洁: ```bash case $var in "start") echo "启动服务" ;; "stop") echo "停止服务" ;; *) echo "未知命令" ;; esac ``` --- #### 四、注意事项 1. **空格要求** 方括号`[ ]`与条件之间必须保留空格,否则报错: ❌错误写法:`if [$a -gt 10]` ✅正确写法:`if [ $a -gt 10 ]`[^3] 2. **变量引用** 变量需用双引号包裹,避免空值错误: ```bash if [ "$var" = "value" ]; then # 安全操作 fi ``` 3. **返回值判断** 条件测试的返回值通过`$?`查看,0表示成立,非0表示不成立。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值