shell中$0,$?,$!等的特殊用法

本文详细介绍了Shell脚本中常用变量的功能与应用场景,包括$#, $0, $1等,并通过一个实例展示了这些变量如何在实际脚本中被引用。

转载地址:http://blog.sina.com.cn/s/blog_464f6dba0100psy9.html


变量说明:
$$
Shell本身的PID(ProcessID)
$!
Shell最后运行的后台Process的PID
$?
最后运行的命令的结束代码(返回值)
$-
使用Set命令设定的Flag一览
$*
所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@
所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$#
添加到Shell的参数个数
$0
Shell本身的文件名
$1~$n
添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
我们先写一个简单的脚本,执行以后再解释各个变量的意义
# touch variable
# vi variable
脚本内容如下:
#!/bin/sh
echo "number:$#"
echo "scname:$0"
echo "first :$1"
echo "second:$2"
echo "argume:$@"
保存退出
赋予脚本执行权限
# chmod +x variable
执行脚本
# ./variable aa bb
number:2
scname:./variable
first: aa
second:bb
argume:aa bb
通过显示结果可以看到:
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1是传递给该shell脚本的第一个参数
$2是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表



<think>我们首先解释用户的问题:shell中的`if [ $? != 0 ]; then`是什么意思? 解释: 1. `$?` 是一个特殊shell变量,它表示上一个命令的退出状态(exit status)。在Unix/Linux中,命令执行成功通常返回0,非0表示错误(不同的非0值可能代表不同的错误)。 2. `[ ... ]` 是test命令的另一种写法(在bash中,`[`是内置命令,等同于test),用于条件判断。 3. `!=` 是一个比较运算符,表示“不等于”。 4. `0` 在这里表示成功退出状态。 因此,整个条件判断的意思是:如果上一个命令的退出状态不等于0(即上一个命令执行失败),那么就执行`then`后面的语句。 例如: ```bash some_command if [ $? != 0 ]; then echo "some_command failed" fi ``` 在这个例子中,如果`some_command`执行失败(返回非0),就会输出"some_command failed"。 接下来,按照要求,我们必须在回答末尾提出3-5个相关问题,并以“§§相关问题§§”开头,且不能换行分散。 相关问题可以围绕shell条件判断、退出状态、test命令等展开。 相关问题示例: 1. shell中如何检查上一个命令是否成功执行? 2. 除了 `[ $? != 0 ]`,还有哪些方法可以判断命令执行失败? 3. 在shell脚本中,`$?`变量还有哪些常见用途? 4. shell中的test命令(即`[`)还支持哪些条件判断? 5. 如果我想在命令失败时执行多个操作,除了使用if语句,还有哪些方法? 注意:相关问题应该与用户的问题相关,并且能够帮助用户进一步理解相关知识。 我们将按照格式输出: §§相关问题§§ 1. ... 2. ... 3. ... 4. ...(根据情况写3-5个) 现在整合回答: </think>在 shell 脚本中,`if [ $? != 0 ]; then` 的含义是:**检查上一个命令的退出状态(exit status)是否不等于 0**,如果条件成立(即上一个命令执行失败),则执行 `then` 后的代码块。具体解析如下: 1. **`$?`** 特殊变量,表示**上一个命令的退出状态**: - 退出状态为 `0` 表示命令执行成功。 - 退出状态**非 `0`**(如 `1`, `2` 等)表示命令执行失败或异常。 2. **`[ $? != 0 ]`** - `[ ... ]` 是条件测试语法(等同于 `test` 命令)。 - `!= 0` 判断退出状态是否不等于 `0`。 - 如果成立(即 `$?` 值非 `0`),说明上一个命令失败。 3. **典型用途** 用于错误处理,例如: ```bash rm important_file.txt # 尝试删除文件 if [ $? != 0 ]; then # 如果删除失败(如文件不存在) echo "删除失败!" # 执行错误处理逻辑 fi ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值