获取当前执行的shell脚本的文件名,但这些变量都

作者: 操作系统  发布:2019-11-29

在Shell里存在的一些特殊变量:$!、$@、$#、$$、$*、$0、$n、$_、$?

位置变量

 

 

9159金沙官网 1

(大讲台:国内首个it在线教育混合式自适应学习)

 

统中进行日常运维或者是编写脚本时,变量是再熟悉不过的了,但这些变量都有哪些类型,具体的用法又有哪些差异呢?本文整理分享给大家:

   一、bash变量类型:

   本地变量

   局部变量

   环境变量

   位置变量

   特殊变量(内置)

   二、本地变量:

   varname=value:作用域为整个bash进程可以使用;

   变量命名规范:

   1. 只能含字母、数字和下划线,并且以字母和下划线开头

   2. 最好不要跟系统已有的环境变量重名

   3. 见名知意

   三、局部变量:

   local varname=value:作用域为当前代码段;

   四、环境变量:

   作用域为当前shell进程及其子进程,不能影响到其父进程;

   export varname=value “导出”,如果变量已经定义可以只是用变量名 export varname,即

   1. export varname=value

   2. varname=value

   export varname

   脚本在执行命令时会启动一个子shell环境变量:

   系统自动执行的脚本(非命令行启动)就需要自我定义需要的个环境变量;

   五、位置变量:

   $1,$2,$3,……

   cat first.sh test.txt hello

   $1: first.sh

   $2: test.txt

   $3: hello

   shift:踢掉参数

   shift n:踢掉n个参数,默认踢掉一个参数

   六、特殊变量:

   $?:上一个命令执行状态的返回值:

   程序执行可能有两种返回值:

   1. 程序执行结果

   2. 程序状态返回吗(0-255)

   0 则为执行正确

   1-255 则执行出错(1,2,127系统预留);

   $#:获取当前shell命令行中参数的总个数

   $*:获取当前shell的所有参数 “$1 $2 $3 …,受IFS控制

   $@:这个程序的所有参数 “$1″ “$2″ “$3″ “…”,不受IFS控制

   $0 获取当前执行的shell脚本的文件名

   $n 获取当前执行的shell脚本的第n个参数值,n=1..9

   $$ 获取当前shell的进程号(PID)

   $! 执行上一个指令的PID

 

[root@shell ~]# sh shell.sh aaa bbb ccc
$0 获取当前执行的shell脚本的文件名:shell.sh
$n 获取当前执行的shell脚本的第n个参数值,n=1..9:$1=aaa $2=bbb $3=ccc
$* 获取当前shell的所有参数"$1 $2 $3 ...注意与$#的区别:"aaa bbb ccc
$# 获取当前shell命令行中参数的总个数:3
$$ 获取当前shell的进程号(PID):2823
$! 执行上一个指令的PID:2824
$? 获取执行的上一个指令的返回值:0
$@ 这个程序的所有参数"$1" "$2" "$3" "..." :aaa bbb ccc
$_ 在此之前执行的命令或脚本的最后一个参数:ccc

$0  获取当前执行的shell脚本的文件名,如果执行脚本带路径那么就包括脚本路径
[root@linuxidc shell]# sh n.sh 
n.sh
 
[root@linuxidc ~]# sh /shell/n.sh 
/shell/n.sh
 
[root@linuxidc shell]# sh `pwd`/n.sh
/shell/n.sh

 

9159金沙官网 2

注:

$n  获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于0,大括号括起来${10}
脚本内容:
#!/bin/bash
echo $1
 
[root@linuxidc shell]# sh p.sh linuxidc    #1个参数
linuxidc                                                                                                                   
 
[root@linuxidc shell]# sh p.sh linuxidc cainiao    #2个参数输出的是第一个参数
linuxidc

$*与$@是有去别的:

$*  获取当前shell的所有参数,将所有的命令行参数视为单个字符串,相当于"$1$2$3".....注意与$#的区域

  $*是将命令行所有的参数当成单个字符,例如"$1$2$3"

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

  $@是将命令行每一个的参数当成单独的字符,例如”$1“ ”$2“ ”$3“

[root@linuxidc shell]# cat p.sh 
echo $1
echo $#
[root@linuxidc shell]# sh p.sh {a..z}
a
26
 
企业应用:(控制用户参数输入的个数)当输入参数不等于2成立输出“muse two”,侧不成立会输出"buchengli"
[root@linuxidc shell]# cat 1p.sh 
#!/bin/bash
[ $# -ne 2 ] && {
echo "muse two"
exit 1          #值1是退出后$? 的值
}
echo "buchengli"
[root@linuxidc shell]# sh 1p.sh bai
muse two
[root@linuxidc shell]# sh 1p.sh bai shu
buchengli
[root@linuxidc shell]#

$@  这个程序的所有参数"$1" "$2" "$3" "...",这是将参数传递给其他程序的最佳方式,因为他会保留内嵌在每个参数里的任何空白。

$*和$@的区别例子
$*  将所有的命令行所有参数视为单个字符串,等同于"$1$2$3","$*9159金沙官网,"

$@  将命令行每个参数视为单独的字符串,等同于"$1" "$2" "$3".这是将参数传递给其他程序的最近方式,因为他会保留所有内嵌在每个参数里的任何空白。

注意:上述区别仅在于加双引号的时候,即"$*"与"$@"

shift  移动位置变量

2.进程状态变量
$$    获取当前shell的进程号
$!    执行上一个指令的PID
$?    获取执行上一个指令的返回值(0为成功,非零为失败)#这个变量很常用
$_      在此之前执行的命令或脚本的最后一个参数

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-06/145001.htm

9159金沙官网 3

本文由9159.com发布于操作系统,转载请注明出处:获取当前执行的shell脚本的文件名,但这些变量都

关键词: