Shell 必知必会 | 二、你需要的 Shell 特殊字符都在这里!

举报
Linux猿 发表于 2021/08/04 23:30:48 2021/08/04
【摘要】   目录 一、Shell 特殊字符 1.1 $N  1.2 $# 1.3 $* 1.5 $? 1.6 $$ 1.7 $! 1.8 $- 二、总结 在写 Shell 脚本的时候,通常会使用到一些特殊字符,比如:$?、$@等,这篇文章将结合实例介绍所有的 Shell 特殊字符,建议先收藏哦! 一、Shell 特殊字符 1.1...

  目录

一、Shell 特殊字符

1.1 $N 

1.2 $#

1.3 $*

1.5 $?

1.6 $$

1.7 $!

1.8 $-

二、总结


在写 Shell 脚本的时候,通常会使用到一些特殊字符,比如:$?、$@等,这篇文章将结合实例介绍所有的 Shell 特殊字符,建议先收藏哦!

一、Shell 特殊字符

1.1 $N 

N 代表一个数字,其中,$0 表示当前脚本文件名,$N (N > 0)表示输入到脚本中的第 N 个输入参数,如下所示:


  
  1. [root@localhost ~]# cat shell.sh
  2. #!/bin/bash
  3. echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
  4. [root@localhost ~]# ./shell.sh 1 2 3 4 5 6 7 8 9 10
  5. ./shell.sh 1 2 3 4 5 6 7 8 9 10
  6. [root@localhost ~]#

注意:$0 输出的是 ./shell.sh。

1.2 $#

传递给脚本或函数的参数个数,如下所示:


  
  1. [root@localhost ~]# cat shell.sh
  2. #!/bin/bash
  3. echo $#
  4. [root@localhost ~]# ./shell.sh 1 2 3
  5. 3
  6. [root@localhost ~]#
  7. [root@localhost ~]# cat shell.sh
  8. #!/bin/bash
  9. funcTest() {
  10. echo $#
  11. }
  12. funcTest 1 2 3 4
  13. [root@localhost ~]# ./shell.sh
  14. 4
  15. [root@localhost ~]#

1.3 $*

 表示传递给脚本或函数的所有参数,如下所示:


  
  1. [root@localhost ~]# cat shell.sh
  2. #!/bin/bash
  3. echo $*
  4. [root@localhost ~]# ./shell.sh 1 2 3 4 5
  5. 1 2 3 4 5
  6. [root@localhost ~]#
  7. [root@localhost ~]# cat shell.sh
  8. #!/bin/bash
  9. funcTest() {
  10. echo $*
  11. }
  12. funcTest 1 2 3 4
  13. [root@localhost ~]# ./shell.sh
  14. 1 2 3 4
  15. [root@localhost ~]#

1.4 $@

表示传递给脚本或函数的所有参数,如下所示:


  
  1. [root@localhost ~]# cat shell.sh
  2. #!/bin/bash
  3. echo $@
  4. [root@localhost ~]# ./shell.sh 1 2 3 4 5
  5. 1 2 3 4 5
  6. [root@localhost ~]#
  7. [root@localhost ~]# cat shell.sh
  8. #!/bin/bash
  9. funcTest() {
  10. echo $@
  11. }
  12. funcTest 1 2 3 4
  13. [root@localhost ~]# ./shell.sh
  14. 1 2 3 4
  15. [root@localhost ~]#

 $@$* 的区别:

  • 当不被双引号包含时,两个符号没区别,都以 $1 $2 $3 ……分开的形式输出;
  • 当被双引号包含时,$*会将所有参数作为一个整体输出,例如:"$1 $2 $3 ……",而 $@ 会将各个参数分开,例如:$1 $2 $3 ……;

下面通过例子看下:

先看下没区别的情况,如下所示:


  
  1. [root@localhost ~]# cat shell.sh
  2. #!/bin/bash
  3. echo "\$*"
  4. for i in $*
  5. do
  6. echo $i
  7. done
  8. echo "\$@"
  9. for i in $@
  10. do
  11. echo $i
  12. done
  13. [root@localhost ~]# ./shell.sh 1 2 3 4 5
  14. $*
  15. 1
  16. 2
  17. 3
  18. 4
  19. 5
  20. $@
  21. 1
  22. 2
  23. 3
  24. 4
  25. 5
  26. [root@localhost ~]#

再看下有区别的情况,如下所示:


  
  1. [root@localhost ~]# cat shell.sh
  2. #!/bin/bash
  3. echo "\$*"
  4. for i in "$*"
  5. do
  6. echo $i
  7. done
  8. echo "\$@"
  9. for i in "$@"
  10. do
  11. echo $i
  12. done
  13. [root@localhost ~]# ./shell.sh 1 2 3 4 5
  14. $*
  15. 1 2 3 4 5
  16. $@
  17. 1
  18. 2
  19. 3
  20. 4
  21. 5
  22. [root@localhost ~]#

在上面的例子中,被双引号包含的 $* 里包含的所有参数被看做一个整体了,直接输出了 “1 2 3 4 5”,而 $@ 里的参数还是分开的。

1.5 $?

表示上个命令的退出状态或函数的返回值,如下所示:


  
  1. [root@localhost ~]# cat shell.sh
  2. #!/bin/bash
  3. pwd
  4. echo $?
  5. ls -l /root/abc
  6. echo $?
  7. [root@localhost ~]# ./shell.sh
  8. /root
  9. 0
  10. ls: 无法访问/root/abc: 没有那个文件或目录
  11. 2
  12. [root@localhost ~]#

第一处 $? 的值为 0,表示命令 pwd 执行成功;第二处 $? 的值为 2,表示上个命令 ls 执行失败。


  
  1. [root@localhost ~]# cat shell.sh
  2. #!/bin/bash
  3. funcTest(){
  4. return 6
  5. }
  6. funcTest
  7. echo $?
  8. [root@localhost ~]# ./shell.sh
  9. 6
  10. [root@localhost ~]#
  11. [root@localhost ~]# cat shell.sh
  12. #!/bin/bash
  13. funcTest(){
  14. echo "abc"
  15. }
  16. val=$(funcTest)
  17. echo $?
  18. [root@localhost ~]# ./shell.sh
  19. 0
  20. [root@localhost ~]#

当 $? 用在函数上,如果有 return 语句,则获取的是 return 语句返回的值,范围是0~255。如果没有 return 语句,$? 的值表示函数中最后执行的那个命令的返回代码。

1.6 $$

表示脚本当前进程的 ID 号,如下所示: 


  
  1. [root@localhost ~]# cat shell.sh
  2. #!/bin/bash
  3. echo $$
  4. [root@localhost ~]# ./shell.sh
  5. 26033
  6. [root@localhost ~]#

1.7 $!

表示后台最后运行的进程的 ID 号,也可以理解为最近运行的进行的 ID 号,不一定是结束的。


  
  1. [root@localhost ~]# top &
  2. [2] 31702
  3. [root@localhost ~]# echo $!
  4. 31702
  5. [2]+ 已停止 top
  6. [root@localhost ~]#

1.8 $-

显示Shell命令使用的当前选项,与 set 命令功能相同,如下所示:


  
  1. [root@localhost ~]# cat shell.sh
  2. #!/bin/bash
  3. set -m
  4. echo $-
  5. set -C
  6. echo $-
  7. [root@localhost ~]# ./shell.sh
  8. hmB
  9. hmBC
  10. [root@localhost ~]#

 注意:在第二次输出的时候多了刚刚设置的参数 C。

二、总结

好了,Shell 特殊字符结合实例讲解完了,感觉不错就一键三连吧,有问题欢迎在评论区留言~

文章来源: blog.csdn.net,作者:Linux猿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nyist_zxp/article/details/112797011

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。