返回列表 发新帖

shell中的位置参数变量详解,以及$*$@区别

[复制链接]

27

主题

4685

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

金币
6826
好评
297
贡献
27

MT论坛元老MT论坛优秀版主小明星MT论坛侠客MT论坛大神2018国庆节2018国庆快乐MT论坛最佳新人MT论坛帅哥2019-5.1节快乐考神

QQ
发表于 2019-11-11 18:46:47 来自手机  | 显示全部楼层 | 阅读模式
$# :传给脚本的参数个数
$0 :当前执行脚本绝对路径
$n :n为数字,代表传给脚本的第n个参数;,超过10个需要用大括号${10}
$@ :参数列表
$* :也是显示参数列表,与上一条命令不同的是,当在双引号里面时,”$*”表示一个参数,即”a b c”,而”$@”表示三个参数,即”a” “b” “c”
$$ :执行当前脚本的进程ID
$!:上一个后台进程的PID  命令 &就可以放后台
$? :上一条命令的退出状态,0表示执行成功,非0表示执行失败.

接下来探讨一下$@和$*的具体区别,创建一个a函数体来做演示,
  1. a() {
  2. echo "$@"
  3. echo "$*"
  4. }
  5. a 1 2 "3 4" 5 6 7 8 9 10 11


  6. 执行结果如下:
  7. 1 2 3 4 5 6 7 8 9 10 11
  8. 1 2 3 4 5 6 7 8 9 10 11
复制代码

咦,好像结果一样,是不是很懵,其实区别还是很大的,我们使用for去一探究竟
  1. a() {
  2. echo '$@加引号结果'
  3. for i in "$@"
  4. do
  5. echo $i
  6. done

  7. echo '$@没加引号结果'
  8. for i in $@
  9. do
  10. echo $i
  11. done
  12. echo '$*加引号结果'
  13. for i in "$*"
  14. do
  15. echo $i
  16. done

  17. echo '$*没加引号结果'
  18. for i in $*
  19. do
  20. echo $i
  21. done
  22. }
  23. a 1 2 "3 4" 5 6 7 8 9 10 11
  24. exit 0

  25. #执行结果如下:
  26. $@加引号结果,累出所有位置变量参数,而不是像$*一样当做整体
  27. 1
  28. 2
  29. 3 4
  30. 5
  31. $@没加引号结果
  32. 1
  33. 2
  34. 3
  35. 4
  36. 5
  37. $*加引号结果,它把所有传递参数当做整体了
  38. 1 2 3 4 5
  39. $*没加引号结果
  40. 1
  41. 2
  42. 3
  43. 4
  44. 5
复制代码

不加双引号一样,所以shell格式还是很重要的。
不要以为位置参数变量只能用于函数体,其实执行脚本时都是可以传递的接下来说说常规的脚本执行方法

  1. ①直接输入脚本绝对路径执行,需要有执行权限
  2. /daa/1.sh
  3. ②跳转到脚本目录再执行,需要有执行权限
  4. cd /data
  5. ./1.sh
  6. 或者
  7. cd /data
  8. `pwd`/1.sh

  9. ③source命令执行可以简写成 . 点
  10. source /data/1.sh
  11. . /data/1.sh
  12. ④sh执行
  13. sh /data/1.sh
  14. ⑤bash执行
  15. bash /data/1.sh
复制代码

当然执行脚本方法太多了就不一一BB了,因为我也是菜鸟
以上的脚本执行方法后面都可以跟位置参数变量
例如
  1. sh /data/1.sh 1 2 3 4 5 6 7 8 9 10
  2. S1=1
  3. $2=2
  4. 以此类推……
  5. 超过10需要用大括号
  6. ${10}=10
复制代码
已有2人评分好评 金币 理由
梦__玩 + 1
尼斯湖水怪 + 1 + 5 优秀,终于有终端的教程了

查看全部评分 总评分:好评 +2  金币 +5 

遇见你是我无法预料的意外,爱上你实属情非得已c.
回复

使用道具 举报

278

主题

1万

帖子

3万

积分

版主

一个水怪

Rank: 7Rank: 7Rank: 7

金币
9487
好评
148
贡献
2

MT论坛灌水老大MT论坛最佳新人2019-5.1节快乐考神MT论坛侠客MT论坛活跃会员

发表于 2019-11-11 18:49:07 来自手机  | 显示全部楼层
沙发是我的了

点评

完美  发表于 2019-11-11 18:50
回复

使用道具 举报

4

主题

454

帖子

7723

积分

硕士生

Rank: 6Rank: 6

金币
651
好评
12
贡献
0
发表于 2019-11-11 19:04:33 来自手机  | 显示全部楼层
祝伟大的祖国繁荣昌盛
回复

使用道具 举报

19

主题

494

帖子

2641

积分

大学生

Rank: 5Rank: 5

金币
466
好评
3
贡献
0
发表于 2019-11-11 19:05:09 来自手机  | 显示全部楼层
顶贴支持楼主!
回复

使用道具 举报

1

主题

2148

帖子

4109

积分

大学生

Rank: 5Rank: 5

金币
2118
好评
1
贡献
0
发表于 2019-11-11 19:06:51 | 显示全部楼层
感谢,学习啦
回复

使用道具 举报

62

主题

675

帖子

1932

积分

高中生

Rank: 4

金币
115
好评
14
贡献
1
发表于 2019-11-11 19:07:46 来自手机  | 显示全部楼层
不懂?????
回复

使用道具 举报

7

主题

1341

帖子

3499

积分

大学生

Rank: 5Rank: 5

金币
132
好评
5
贡献
0

考神MT论坛最佳新人MT论坛帅哥

发表于 2019-11-11 21:12:13 来自手机  | 显示全部楼层
感谢分享,没用过shell
回复

使用道具 举报

8

主题

687

帖子

1834

积分

高中生

Rank: 4

金币
73
好评
0
贡献
0
发表于 2019-11-12 12:02:03 来自手机  | 显示全部楼层
感谢分享
回复

使用道具 举报

0

主题

179

帖子

415

积分

初中生

Rank: 3Rank: 3

金币
133
好评
0
贡献
0
发表于 2019-11-15 20:34:11 | 显示全部楼层
顶贴支持楼主!
回复

使用道具 举报

1

主题

1079

帖子

3813

积分

大学生

Rank: 5Rank: 5

金币
2857
好评
0
贡献
0
发表于 2019-11-15 20:38:22 来自手机  | 显示全部楼层
学习一下
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表