shell相关(1)--bash

Bash技巧:介绍 $0、$1、 2 、 2、 2#、 @ 、 @、 @*、$? 的含义

在编写 Linux bash shell 脚本时,经常会用到 $0、$1、$2、$#、$@、$*、$? 等参数,下面具体说明这些参数的含义。
假设执行 ./test.sh a b c 这样一个命令,则可以使用下面的参数来获取一些值:

•$0 对应 "./test.sh" 这个值。如果执行的是 ./work/test.sh, 则对应 ./work/test.sh 这个值,而不是只返回文件名本身的部分。
•$1 会获取到 a,即 $1 对应传给脚本的第一个参数。
•$2 会获取到 b,即 $2 对应传给脚本的第二个参数。
•$3 会获取到 c,即 $3 对应传给脚本的第三个参数。$4、$5 等参数的含义依此类推。
•$# 会获取到 3,对应传入脚本的参数个数,统计的参数不包括 $0。
•$@ 会获取到 "a" "b" "c",也就是所有参数的列表,不包括 $0。
•$* 也会获取到 "a" "b" "c", 其值和 $@ 相同。但 $* 和 $@ 加上双引号有所不同。"$*" 把所有参数合并成一个字符串,而 "$@" 会得到一个字符串参数数组。
•$? 可以获取到执行 ./test.sh a b c 命令后的返回值。在执行一个前台命令后,可以立即用 $? 获取到该命令的返回值。该命令可以是系统自身的命令,可以是 shell 脚本,也可以是自定义的 bash 函数。0值为执行成功;非0值为执行失败。

变量		含义
$0		当前脚本的文件名
$n		传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$#		传递给脚本或函数的参数个数(不包含$0)。
$*		传递给脚本或函数的所有参数("$*"会把所有参数当成一个字符串)。
$@		传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。("$@"会把所有单数当成一个数组。)
$?		上个命令的退出状态,或函数的返回值。
$$		当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

通过脚本记忆特殊变量:

[root@ k8s-m01 ~] cat test.sh
#!/bin/bash
echo "$0"
echo "$1"
echo "$2"
echo "$3"
echo "$#"
echo "$@"
echo "$*"
echo "$?"
[root@ k8s-m01 ~] sh test.sh a b c
test.sh
a
b
c
3
a b c
a b c
0

下面举例说明 “ ∗ " 和 " *" 和 " ""@” 的差异。假设有一个 testparams.sh 脚本,内容如下:

[root@ k8s-m01 ~] cat test.sh
#!/bin/bash

for i in "$*"
do
  echo '字符串:' $i
done

echo '----分割符----'

for i in "$@"
do
  echo '数组:' $i
done
[root@ k8s-m01 ~] sh test.sh a b c
字符串: a b c
----分割符----
数组: a
数组: b
数组: c
可以看到,"$*" 只产生一个字符串,for 循环只遍历一次。 
而 "$@" 产生了多个字符串,for 循环遍历多次,是一个字符串参数数组。
注意:
如果传入的参数多于 9 个,则不能使用 $10 来引用第 10 个参数,而是要用${10} 来引用。
即,需要用大括号{}把大于 9 的数字括起来。
例如
${10} 表示获取第 10 个参数的值,写为 $10 获取不到第 10 个参数的值。
实际上,$10 相当于 ${1}0,也就是先获取 $1 的值,后面再跟上 0,如果 $1 的值是 "first",则 $10 的值是 "first0"。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值