Shell变量_特殊变量

特殊变量

shell的特殊变量,用在如脚本,函数传递参数使用,有如下的特殊的,位置参数变量

  • $0 获取shell脚本文件名,以及脚本路径
  • $n 获取shell脚本的第n个参数,n在1-9之间,如$1,$9,大于9则需要加大括号 ${10},参数空格隔开
  • $# 获取执行的shell脚本后面的参数总个数
  • $* 获取shell脚本所有参数,加上引号“$*”作为一个整体,
  • $@ 获取shell脚本所有参数作 把每个参数区分对待,
  2 #
  3 #
  4 #author    cread by Mrxu
  5 #function  特殊变量位置参数举例
  6 echo "你录入的参数总个数$#"
  7 echo ‘'参数列表以$@接受'
  8 for var in $@
  9 do
 10  echo "$var" 
 11 done
 12 echo ‘'参数列表以$*接受'
 13 for var in $*
 14 do
 15  echo "$var" 
 16 done
 17 echo ‘'参数列表以"$@"接受'
 18 for var in "$@"
 19 do
 20  echo "$var" 
 21 done
 22 echo ‘'参数列表以"$*"接受'
 23 for var in "$*"
 24 do
 25  echo "$var" 
 26 done
[root@localhost tmp]# sh MyVar.sh  1 2 3
你录入的参数总个数3
‘参数列表以$@接受
1
2
3
‘参数列表以$*接受
1
2
3
‘参数列表以"$@"接受
1
2
3
‘参数列表以"$*"接受
1 2 3
[root@localhost tmp]# 

注意:$*和$@的区别

当$*和$@不被引号""时,他们之间没区别,都是将接收的参数看着一份数据,彼此以空格分隔

但是当他们被""时,就存在区别

"$*" 会将所有的参数从整体上看做一份数据,

"$@"任然将每个参数都看着一份数据,彼此独立

特殊状态变量
  • $? 上一次命令执行状态返回值, 0正确,非0失败

  • $! 上一次 后台的进程pid

  • $_ 在此之前执行的命令,最后一个参数

  • $$ 当前shell 进程号pid

#查看帮助文档特殊变量 通过man 手册查询
[root@localhost ~]# man bash
/Speical Parameters  #搜索关键字

脚本控制返回值的玩法,脚本返回值,学习shell函数编程之后,才能彻底立即。这个脚本执行完毕了,会返回一个数字id,称为返回值。

#案例:$#和$?案例 脚本控制返回值的玩法1.
[root@localhost tmp]# vim  demo1.sh
#!/bin/bash
 [ $# -ne 2 ] && {
 echo "请传入正确的参数个数!"
 exit 119  #终止程序允许,且返回119状态玛,提供给当前shell的$?变量,若函数里可以return 119
}
 echo "传入参数个数ok!"
######执行
[root@localhost tmp]# sh demo1.sh 2 5 6 
请传入正确的参数个数!
[root@localhost tmp]# $?
bash: 119: 未找到命令...
[root@localhost tmp]# sh demo1.sh 2 5 
传入参数个数ok!
[root@localhost tmp]# $?
bash: 0: 未找到命令...
##案例2:
[root@localhost tmp]# nohup ping www.baidu.com & 1> /dev/null
[1] 4027
[root@localhost tmp]# nohup: 忽略输入并把输出追加到"nohup.out"
ps -ef|grep ping
root      2376  1987  0 14:32 ?        00:00:00 /usr/libexec/gsd-housekeeping
root      4027  2894  0 15:31 pts/0    00:00:00 ping www.baidu.com
root      4035  2894  0 15:31 pts/0    00:00:00 grep --color=auto ping
[root@localhost tmp]# echo $!
4027
[root@localhost tmp]# 

###案例3:$$当前进程编号;由下案例也可看出来,用.和sourc是用的当前shell,相当/觉得路径和sh调用脚本都是另开一个新的shell进程
#!/bin/bash
 [ $# -ne 2 ] && {
 echo "请传入正确的参数个数!"
 exit 119  #终止程序允许,且返回119状态玛,提供给当前shell的$?变量,若函数里可以return 119
}
 echo "传入参数个数ok!"
 echo "当前的脚本id是:$$"

[root@localhost tmp]# 
[root@localhost tmp]# sh demo1.sh  3 3
传入参数个数ok!
当前的脚本id是:4316
[root@localhost tmp]# echo $$   
2894
[root@localhost tmp]# . demo1.sh 3 3 
传入参数个数ok!
当前的脚本id是:2894
[root@localhost tmp]# source demo1.sh  3 3
传入参数个数ok!
当前的脚本id是:2894
[root@localhost tmp]# pwd
/root/tmp
[root@localhost tmp]# /root/tmp/demo1.sh  3 3
传入参数个数ok!
当前的脚本id是:4378
[root@localhost tmp]#  sh demo1.sh  3 3
传入参数个数ok!
当前的脚本id是:4395
[root@localhost tmp]# sh demo1.sh  3 5 6
请传入正确的参数个数
[root@localhost tmp]# echo $_
6
[root@localhost tmp]# 
posted @   翻滚的小井蛙  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示