shell编程之——特殊变量

shell特殊变量

备注:详细的可以通过 man bash 命令查看bash手册

1、位置参数变量

脚本演示

#! /bin/bash
# 我是一个脚本文件

echo '这是文件名' $0
echo "第一个参数$1,第二个参数$2,第三个参数$3"
echo "一共有$#个参数"
echo "所有参数$*"
echo "$@"

结果展示

$ bash /workspace/special.sh a b c d e f
这是文件名 /workspace/special.sh
第一个参数a,第二个参数b,第三个参数c
一共有6个参数
所有参数a b c d e f
a b c d e f

问:$ @ 和 $ * 的区别

$@ 和 $* 都表示传递函数或脚本的所有参数

当 $@ 和 $* 没有被 " "包围时: 它们之间没有任何区别,都是将接收到的每个参数看做一份数据,彼此之间以“空格”来分隔

但是当它们被双引号" "包围时,就有区别: “ $*” 会将所有的参数从整体上看做一份数据,而不是把每个参数都看作 “一份数据”; “$@ ” 任然会将每个参数看作一份数据,彼此之间是“独立”的

实例:

$ cat for.sh 
#! /bin/bash
echo "比较\$*与\$@的不同"
echo "\$*的结果"
for var in "$*"
do
        echo "$var"
done

echo "\$@的结果"
for var in "$@"
do
        echo "$var"
done

结果:
$ bash for.sh a b c d e
比较$*与$@的不同
$*的结果
a b c d e
$@的结果
a
b
c
d
e

可以看出两者的区别!


2、特殊状态变量

1、脚本控制返回值,脚本返回值,脚本执行完毕会返回一个数字ID,称之为返回值:echo $?:0,成功;130,中断执行;1-255,失败

#! /bin/bash
# $#获取参数个数,-ne不等于的情况 ,&& 并且

[ $#  -ne  2 ]  &&  {
        echo "must be two args"
        exit 119  #终止程序运行,且返回119状态码,提供给当前shell的$?变量,若是在函数里,可以 return 119 用法。
}
echo "just ok"

结果如下:

# 当输入两个以上的变量时,会返回我们指定的状态码119给当前shell的$?变量
$ bash test.sh a b c
must be two args
$ echo $?
119

2、输入$$ 获取当前shell进程ID号

#当前bash解释器的进程号为 63
$ echo $$
63

3、获取上一次后台执行程序的PID:$! 获取

问:如何让程序后台运行?

nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。

nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

重定向符回顾:
1> 将正确的输出重定向到某个文件
2> 将错误的输出重定向到某个文件

脚本演示:

#通过 nohup 让程序在后台运行,并把结果重定向到黑洞文件
$ nohup ping baidu.com & 1>/dev/null
[1] 3335  #ping这个程序的PID:3335
nohup: ignoring input and appending output to 'nohup.out'

#我们在通过$!查看上次后台执行程序的PID
$ echo $!
3335

4、输入$_ 获取再此之前执行的命令,最后一个参数

$ ls -a
.  ..  .cache  .cargo  .config  docker  .docker-root  for.sh  .gitpod  nohup.out  .pyenv_mirror  special.sh  test.sh  .vscode-remote
$ echo $_
-a    #输出了最后一个参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值