12下一页
返回列表 发新帖

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

[复制链接]

29

主题

5516

回帖

1万

积分

版主

Rank: 7Rank: 7Rank: 7

金币
12099
好评
376
信誉
127

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 

回复

使用道具 举报

483

主题

2万

回帖

6万

积分

版主

喵喵,喵~

Rank: 7Rank: 7Rank: 7

金币
44808
好评
304
信誉
126

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

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

点评

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

使用道具 举报

44

主题

1176

回帖

6092

积分

硕士生

Rank: 6Rank: 6

金币
548
好评
7
信誉
100
发表于 2019-11-11 19:05:09 来自手机  | 显示全部楼层  来自 广东
顶贴支持楼主!
回复

使用道具 举报

1

主题

2283

回帖

4494

积分

大学生

Rank: 5Rank: 5

金币
2610
好评
1
信誉
100
发表于 2019-11-11 19:06:51 | 显示全部楼层  来自 河北
感谢,学习啦
回复

使用道具 举报

34

主题

292

回帖

1729

积分

禁止访问

金币
0
好评
33
信誉
100
发表于 2019-11-11 19:07:46 来自手机  | 显示全部楼层  来自 广东
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

389

主题

8296

回帖

3万

积分

博士后

Rank: 8Rank: 8

金币
14870
好评
52
信誉
101

考神MT论坛最佳新人MT论坛帅哥MT论坛活跃会员MT论坛灌水老大MT论坛新人MT论坛新人挂机大佬

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

使用道具 举报

162

主题

8064

回帖

2万

积分

博士后

滑稽

Rank: 8Rank: 8

金币
754
好评
474
信誉
210

MT论坛新人MT论坛最佳新人MT论坛活跃会员考神MT论坛帅哥MT论坛灌水老大

QQ
发表于 2019-11-12 12:02:03 来自手机  | 显示全部楼层  来自 广东
感谢分享
回复

使用道具 举报

0

主题

210

回帖

502

积分

初中生

Rank: 3Rank: 3

金币
220
好评
0
信誉
100
发表于 2019-11-15 20:34:11 | 显示全部楼层  来自 吉林
顶贴支持楼主!
回复

使用道具 举报

1

主题

3140

回帖

8429

积分

硕士生

Rank: 6Rank: 6

金币
5212
好评
0
信誉
100
发表于 2019-11-15 20:38:22 来自手机  | 显示全部楼层  来自 福建
学习一下
回复

使用道具 举报

31

主题

1269

回帖

4542

积分

大学生

Rank: 5Rank: 5

金币
962
好评
4
信誉
98

考神

发表于 2020-2-29 15:20:17 来自手机  | 显示全部楼层  来自 北京
谢谢分享,金币加一
回复

使用道具 举报

86

主题

718

回帖

2632

积分

大学生

Rank: 5Rank: 5

金币
310
好评
7
信誉
101
发表于 2020-3-3 20:23:26 | 显示全部楼层  来自 河南
加好友涨积分
回复

使用道具 举报

19

主题

3748

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
2538
好评
5
信誉
100

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

发表于 2020-8-10 14:36:35 来自手机  | 显示全部楼层  来自 河南
搞机助手
回复

使用道具 举报

0

主题

99

回帖

284

积分

初中生

Rank: 3Rank: 3

金币
101
好评
0
信誉
100
发表于 2021-8-21 19:30:12 来自手机  | 显示全部楼层  来自 广东
大佬牛逼
回复

使用道具 举报

1

主题

3184

回帖

5131

积分

硕士生

Rank: 6Rank: 6

金币
488
好评
0
信誉
100
发表于 2022-4-20 16:39:53 | 显示全部楼层  来自 福建
过来看看。。
回复

使用道具 举报

11

主题

105

回帖

319

积分

初中生

Rank: 3Rank: 3

金币
25
好评
0
信誉
101

MT论坛新人

QQ
发表于 2022-5-5 00:55:48 来自手机  | 显示全部楼层  来自 内蒙古
噜啦啦啦啦啦啦
回复

使用道具 举报

发表回复

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

本版积分规则

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