小奋斗 - 轻松学习从此开始!
IT小奋斗群 QQ群:62017228

Liunx Shell的特殊重要内置变量

《1》位置变量

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$0 获取当前执行的shell脚本的文件名,如果执行脚本带路径,那么就包括脚本路径。

$n 获取当前执行shell的命令行的第n个参数,当n=0时表示脚本的文件名,如果n>9,用{}将其括起来,参数以空格隔开。

$# 获取当前执行的shell脚本后面接的参数的总个数。

[root@localhost SHELL]# vim test.sh 
[root@localhost SHELL]# sh test.sh "how are you" hello
how are you hello 2 test.sh
[root@localhost SHELL]# cat test.sh 
echo $1 $2 $# $0
[root@localhost SHELL]# 

///////////////////加引号与否
[root@localhost SHELL]# vim test.sh 
[root@localhost SHELL]# sh test.sh how are you
how are
[root@localhost SHELL]# sh test.sh "how are you" hello
how are you hello
[root@localhost SHELL]# cat test.sh 
echo $1 $2

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$*
$@

$@ 与 $* 的区别:
\$* 将命令行的所有参数视为一个单独的字符串,等同于”\$1\$2\$3”,”\$*”

$@ 将命令行的每个参数视为单独的字符串,等同于”$1”, “$2”, “$3”.

dirname 与 basename

dirname 获取文件的路径名
basename 获取文件的名称

[root@localhost SHELL]# dirname /root/Desktop/SHELL/test.sh 
/root/Desktop/SHELL
[root@localhost SHELL]# basename /root/Desktop/SHELL/test.sh 
test.sh
[root@localhost SHELL]#

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$0的使用验证

这里写图片描述

《2》进程状态变量

$? 获取执行上一个指令的返回值(0表示成功,非0表示失败)

[root@localhost SHELL]# echo $?
0
[root@localhost SHELL]# sh test1.sh 
ni hao, ming tian
[root@localhost SHELL]# echo $?
0
[root@localhost SHELL]# cat test1.sh 
echo 'ni hao, ming tian'
[root@localhost SHELL]#

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$? 的返回值的意义:

0 执行成功
2 权限不够
1~125 执行失败
126 找到该命令了,但是无法执行
127 未找到要运行的命令
大于128 命令被系统强制中断

提示: 在脚本中一般用 exit 数字,在执行脚本后,返回返回值给$?;;;; 在函数里用return 数字 返回返回值给$?

$! 获取执行上一个指令的PID
$$ 获取当前shell的进程号(PID)

[root@localhost SHELL]# sh test1.sh 
ni hao, ming tian
[root@localhost SHELL]# echo $$
5964
[root@localhost SHELL]# cat test1.sh 
echo 'ni hao, ming tian'
[root@localhost SHELL]# 

/////////////////
[root@localhost SHELL]# vim test.sh 
[root@localhost SHELL]# sh test.sh &
[2] 7733
[root@localhost SHELL]# cat /tmp/a.pid 
7733
[root@localhost SHELL]# cat test.sh 
echo $$ >/tmp/a.pid
sleep 200
[root@localhost SHELL]#

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$_ 获取在此之前执行的命令或脚本的最后一个参数

[root@localhost SHELL]# ls ./
test1.sh  test.sh  UNIX.shell范例精解(第4版).pdf
[root@localhost SHELL]# echo $_
./
[root@localhost SHELL]# 

//////////////////
[root@localhost SHELL]# cat test.sh 
echo $1 $2 $# $0
[root@localhost SHELL]# echo $_
test.sh
[root@localhost SHELL]# sh test.sh hello world
hello world 2 test.sh
[root@localhost SHELL]# echo $_
world
[root@localhost SHELL]#

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

小奋斗文章

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我来评几句
登录后评论

已发表评论数(0)