Shell 必知必会 | 二、你需要的 Shell 特殊字符都在这里!
目录
在写 Shell 脚本的时候,通常会使用到一些特殊字符,比如:$?、$@等,这篇文章将结合实例介绍所有的 Shell 特殊字符,建议先收藏哦!
一、Shell 特殊字符
1.1 $N
N 代表一个数字,其中,$0 表示当前脚本文件名,$N (N > 0)表示输入到脚本中的第 N 个输入参数,如下所示:
-
[root@localhost ~]# cat shell.sh
-
#!/bin/bash
-
-
echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
-
-
[root@localhost ~]# ./shell.sh 1 2 3 4 5 6 7 8 9 10
-
./shell.sh 1 2 3 4 5 6 7 8 9 10
-
[root@localhost ~]#
注意:$0 输出的是 ./shell.sh。
1.2 $#
传递给脚本或函数的参数个数,如下所示:
-
[root@localhost ~]# cat shell.sh
-
#!/bin/bash
-
-
echo $#
-
[root@localhost ~]# ./shell.sh 1 2 3
-
3
-
[root@localhost ~]#
-
[root@localhost ~]# cat shell.sh
-
#!/bin/bash
-
-
funcTest() {
-
echo $#
-
}
-
-
funcTest 1 2 3 4
-
[root@localhost ~]# ./shell.sh
-
4
-
[root@localhost ~]#
1.3 $*
表示传递给脚本或函数的所有参数,如下所示:
-
[root@localhost ~]# cat shell.sh
-
#!/bin/bash
-
-
echo $*
-
[root@localhost ~]# ./shell.sh 1 2 3 4 5
-
1 2 3 4 5
-
[root@localhost ~]#
-
[root@localhost ~]# cat shell.sh
-
#!/bin/bash
-
-
funcTest() {
-
echo $*
-
}
-
-
funcTest 1 2 3 4
-
[root@localhost ~]# ./shell.sh
-
1 2 3 4
-
[root@localhost ~]#
1.4 $@
表示传递给脚本或函数的所有参数,如下所示:
-
[root@localhost ~]# cat shell.sh
-
#!/bin/bash
-
-
echo $@
-
[root@localhost ~]# ./shell.sh 1 2 3 4 5
-
1 2 3 4 5
-
[root@localhost ~]#
-
[root@localhost ~]# cat shell.sh
-
#!/bin/bash
-
-
funcTest() {
-
echo $@
-
}
-
-
funcTest 1 2 3 4
-
[root@localhost ~]# ./shell.sh
-
1 2 3 4
-
[root@localhost ~]#
$@ 与 $* 的区别:
- 当不被双引号包含时,两个符号没区别,都以 $1 $2 $3 ……分开的形式输出;
- 当被双引号包含时,$*会将所有参数作为一个整体输出,例如:"$1 $2 $3 ……",而 $@ 会将各个参数分开,例如:$1 $2 $3 ……;
下面通过例子看下:
先看下没区别的情况,如下所示:
-
[root@localhost ~]# cat shell.sh
-
#!/bin/bash
-
-
echo "\$*"
-
for i in $*
-
do
-
echo $i
-
done
-
-
echo "\$@"
-
for i in $@
-
do
-
echo $i
-
done
-
[root@localhost ~]# ./shell.sh 1 2 3 4 5
-
$*
-
1
-
2
-
3
-
4
-
5
-
$@
-
1
-
2
-
3
-
4
-
5
-
[root@localhost ~]#
再看下有区别的情况,如下所示:
-
[root@localhost ~]# cat shell.sh
-
#!/bin/bash
-
-
echo "\$*"
-
for i in "$*"
-
do
-
echo $i
-
done
-
-
echo "\$@"
-
for i in "$@"
-
do
-
echo $i
-
done
-
[root@localhost ~]# ./shell.sh 1 2 3 4 5
-
$*
-
1 2 3 4 5
-
$@
-
1
-
2
-
3
-
4
-
5
-
[root@localhost ~]#
在上面的例子中,被双引号包含的 $* 里包含的所有参数被看做一个整体了,直接输出了 “1 2 3 4 5”,而 $@ 里的参数还是分开的。
1.5 $?
表示上个命令的退出状态或函数的返回值,如下所示:
-
[root@localhost ~]# cat shell.sh
-
#!/bin/bash
-
-
pwd
-
echo $?
-
-
ls -l /root/abc
-
echo $?
-
[root@localhost ~]# ./shell.sh
-
/root
-
0
-
ls: 无法访问/root/abc: 没有那个文件或目录
-
2
-
[root@localhost ~]#
第一处 $? 的值为 0,表示命令 pwd 执行成功;第二处 $? 的值为 2,表示上个命令 ls 执行失败。
-
[root@localhost ~]# cat shell.sh
-
#!/bin/bash
-
-
funcTest(){
-
return 6
-
}
-
-
funcTest
-
echo $?
-
[root@localhost ~]# ./shell.sh
-
6
-
[root@localhost ~]#
-
[root@localhost ~]# cat shell.sh
-
#!/bin/bash
-
-
funcTest(){
-
echo "abc"
-
}
-
-
val=$(funcTest)
-
echo $?
-
[root@localhost ~]# ./shell.sh
-
0
-
[root@localhost ~]#
当 $? 用在函数上,如果有 return 语句,则获取的是 return 语句返回的值,范围是0~255。如果没有 return 语句,$? 的值表示函数中最后执行的那个命令的返回代码。
1.6 $$
表示脚本当前进程的 ID 号,如下所示:
-
[root@localhost ~]# cat shell.sh
-
#!/bin/bash
-
-
echo $$
-
[root@localhost ~]# ./shell.sh
-
26033
-
[root@localhost ~]#
1.7 $!
表示后台最后运行的进程的 ID 号,也可以理解为最近运行的进行的 ID 号,不一定是结束的。
-
[root@localhost ~]# top &
-
[2] 31702
-
[root@localhost ~]# echo $!
-
31702
-
-
[2]+ 已停止 top
-
[root@localhost ~]#
1.8 $-
显示Shell命令使用的当前选项,与 set 命令功能相同,如下所示:
-
[root@localhost ~]# cat shell.sh
-
#!/bin/bash
-
-
set -m
-
echo $-
-
-
set -C
-
echo $-
-
[root@localhost ~]# ./shell.sh
-
hmB
-
hmBC
-
[root@localhost ~]#
注意:在第二次输出的时候多了刚刚设置的参数 C。
二、总结
好了,Shell 特殊字符结合实例讲解完了,感觉不错就一键三连吧,有问题欢迎在评论区留言~
文章来源: blog.csdn.net,作者:Linux猿,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nyist_zxp/article/details/112797011
- 点赞
- 收藏
- 关注作者
评论(0)