经过状态变量

$0 $# $n–>$[1..9] $* $@

①、$0 得到当前剧本的文书名,包罗路线。

在Shell里设有的一些特种变量:$!、$@、$#、$$、$*、$0、$n、$_Shell编制程序之特殊变量的笔记小结,Shell的特殊变量。、$?

壹、$$获取当前shell的历程号(PID)
2、$!试行上3个命令的PID
叁、$?获取实践上二个限令的重返值(0为成功,非零为退步,那几个很常用)
4、$_在此在此以前实践的命令或脚本的最终贰个参数

一、在shell中设有着一些奇特而又珍视的变如:$一 $0
$#,我们誉为特殊的职分变量要从命令行,函数,脚本,等传递参数时,就需求在shell脚本中央银行使地点参数变量

复制代码 代码如下:

[root@shell ~]# sh shell.sh aaa bbb ccc
$0 获取当前执行的shell脚本的文本名:shell.sh
$n 获取当前实施的shell脚本的第n个参数值,n=一..九:$一=aaa $二=bbb $三=ccc
$* 获取当前shell的富有参数”$一 $贰 $叁 …在意与$#的区别:”aaa bbb ccc
$# 获取当前shell命令行中参数的总个数:3
$$ 获取当前shell的进程号(PID):2八二3
$! 实行上1个指令的PID:2捌贰肆
$? 获取执行的上3个下令的重临值:0
$@ 那几个顺序的持有参数”$一” “$二” “$三” “…” :aaa bbb ccc
$_ 以前试行的一声令下或脚本的尾声3个参数:ccc

复制代码 代码如下:

  1. $0:展现当前的剧本文件名,若是在实践脚本时增多了门道,那么任何都会输出
  2. $n:获取当前实行的shell脚本的第n个参数值举个例子:[n=1..9],要是N大于九那么快要动用{}来定义
    譬如${10}
  3. $#:获取当前shell脚本后边接的参数的个数
  4. $*:获取当前剧本的参数,不加引号和$@是同等的 加了引号;举例”$*”
    则意味着单个字符串。也就是”$一 $二 $3″
  5. $@:相同也是得到当前shell的参数,不加引号和$*是壹律的,那么加了引号如:”$@”
    表示将有着的参数视为不一致独立的字符串,也便是”$1″ “$2”..

#写一个测试脚本
vim test.sh
#内容如下
dirname$0
basename$0
#实施一下
bash$(pwd)/test.sh
#出口如下
/home/jane
test.sh

 

cat> test$.sh
echo’$$=’$$
echo’$!=’$!
echo’$?=’$?
echo’$@=’$@
echo’$_=’$_
#出口如下
sh test\$.sh 1 2 3
$$=2556
$!=
$?=0
$@=1 2 3

总结:$*和$@不加双引号 是没有任何差其他,有双引号两个就有分别

二、$n
获取当前实施脚本的第n个参数,n=一..玖,$0,为当下脚本名。就算n大于玖,使用${拾}

注:

$*和$@的区别

1)$壹 $2 特殊变量实战

复制代码 代码如下:

$*与$@是有去其余:

$*将享有的参数视为单个字符串,约等于“$1$二$3”
$@将种种参数视为单个的字符串,保留命令行中的任何空白字符

[root@yankerp src]# cat test.sh #查看脚本的内容 
#!/bin/bash 
echo $1   ---<定义了$1 
[root@yankerp src]# source test.sh yankai #执行的脚本的时候将yankai赋值给脚本中的1 
yankai         #输出yankai 
[root@yankerp src]# 

echo’echo ‘$(seq-s ” $”1 5|sed’s/1/$1/’) > test_n.sh
cattest_n.sh
#内容如下
#echo $1 $2 $3 $4 $5
bashtest_n.sh arg1 agr2 arg3
#输出内容:
#arg1 agr2 arg3

  $*是将命令行全数的参数当成单个字符,比方”$一$二$三”

复制代码 代码如下:

例2:

3、$* 获取脚本全数参数

  $@是将下令行每1个的参数当成单独的字符,举例”$一“ ”$贰“ ”$叁“

set– ‘I am’jane lee
fori in$*; doecho$i; done;
I
am
jane
澳门金沙国际 ,lee
fori in$@; doecho$i; done;
I
am
jane
lee
fori in”$@”; doecho$i; done;
I am
jane
lee
fori in”$*”; doecho$i; done;
I am jane lee

[root@yankerp src]# cat test.sh #脚本内容 
#!/bin/bash 
echo $1 
[root@yankerp src]# source test.sh zhangsan lisi #zhansgan lisi是两个字符串以空格分割 
zhangsan      #只输出了zhangsan,因为脚本中只定义了$1 
[root@yankerp src]#  

复制代码 代码如下:

您恐怕感兴趣的篇章:

  • Shell编制程序中的特殊变量之职分变量介绍
  • Shell编制程序之特殊变量的笔记小结

例3:

echo’echo $*’>test_*.sh
cattest_*.sh
#内容如下:
#echo $*
bashtest_*.sh 1 2 3
#输出:
#1 2 3

[root@yankerp src]# cat test.sh #查看脚本的内容 
#!/bin/bash 
echo $1 
[root@yankerp src]# source test.sh "zhangsan lisi" #加双引号表示一个字符串参数 
zhangsan lisi    #最后输出结果为zhangsan lisi 
[root@yankerp src]# 

4、$# 获得剧本全部参数的个数

例四:在剧本中增加$1 $贰测试:

复制代码 代码如下:

[root@yankerp src]# cat test.sh #查看脚本的内容 
#!/bin/bash 
echo $1 $2    定义了$1 $2 
[root@yankerp src]# source test.sh zhangsan lisi #在执行脚本的时候定义了两个字符串 
zhangsan lisi    #说明 zhangsan赋值给了$1 lisi赋值给了$2 输出结果为 zhangsan lisi 
[root@yankerp src]# 

echo’echo $#’>test_j.sh
cattest_j.sh
#内容如下:
#echo $#
bashtest_j.sh 1 2 3
#输出:
#3

与此同时也能够这么加双引号 如下:

您恐怕感兴趣的小说:

  • Shell编制程序中的特殊变量之进度状态变量介绍
  • Shell编制程序之特殊变量的笔记小结
[root@yankerp src]# cat test.sh #查看脚本的内容 
#!/bin/bash 
echo $1 $2 
[root@yankerp src]# source test.sh "zhangsan lisi" yankai #""表示一个字符串  
zhangsan lisi yankai  #输出结果 
[root@yankerp src]# 

2)当大家1个个的输入echo
$一—一伍时会感觉极慢大家能够使用以下命令来收取命令传递的16个参数

[root@yankerp src]# echo \${1..15} 
$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 

将出口的剧情导入到test.sh文件中

[root@yankerp src]# echo \${1..15} > test.sh  
[root@yankerp src]# cat test.sh  
$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 
[root@yankerp src]# 

笔者们在剧本第三行加入echo

echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 

三)打字与印刷二陆个字母如下:

[root@yankerp src]# echo {a..z}  
a b c d e f g h i j k l m n o p q r s t u v w x y z 

传入26个字母a-z 作为26个参数

[root@yankerp src]# cat test.sh  
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 #脚本内容 
[root@yankerp src]# source test.sh {a..z}  #传入26个字母 
a b c d e f g h i a0 a1 a2 a3 a4 a5   #位置参数大于9后,输出的内容就不对了 
[root@yankerp src]# 

当地点参数大于玖时 上面已经涉及了大家能够运用{}来定义如下:

[root@yankerp src]# cat test.sh  
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15} 

再次·执行

[root@yankerp src]# source test.sh {a..z} 
a b c d e f g h i j k l m n o 

四)$0特殊变量实战

[root@yankerp src]# cat y.sh  
#!/bin/bash 
echo $0 

当大家不带路线运转脚本,它会打字与印刷脚本的名称,如下:

[root@yankerp src]# sh y.sh  
y.sh 

当大家带相对路线来试行脚本时,它会输出路线+脚本名

[root@yankerp src]# sh /usr/local/src/y.sh  
/usr/local/src/y.sh 

介绍dirname —- basename

[root@yankerp src]# dirname /usr/local/src/y.sh  
/usr/local/src 
[root@yankerp src]# basename /usr/local/src/y.sh  
y.sh 

·dirname成效:获取脚本的路子
·basename:获取脚本的名号

例如:

[root@yankerp src]# cat y.sh  
#!/bin/bash 
dirname $0 
basename $0 
[root@yankerp src]# sh /usr/local/src/y.sh  
/usr/local/src 
y.sh 
[root@yankerp src]# 

5)$#非同一般变量获取传参个数推行

[root@yankerp src]# cat test.sh  
echo $1 $2 $3 $4 $5 $6 $7 $8 $9  < 9个位置参数变量 
echo $#  <----加入$# 
[root@yankerp src]# source test.sh {a..z}  <传入26个字符 
a b c d e f g h i  -----<只接收9个变量 
26 ----<传入26个字符。因此这里显示26 
[root@yankerp src]# 

实例一:条件表达式剖断语句如下:

#!/bin/bash 
[ $# -ne "2" ] && {    #如果用户输入的传参个数不等于2 
 echo "请输出正确的数值" #那么输出此信息 
 exit 1         #随后退出脚本 
} 
echo "输入正确"      #如果输入的传参个数是2 那么就输出此信息 

运维脚本如下:

[root@yankerp src]# sh p.sh  
请输出正确的数值 
[root@yankerp src]# sh p.sh zhangsan lisi 
输入正确 
[root@yankerp src]# 

IF语句判定如下:

#!/bin/bash 
if [ $# -ne "2" ]   -------如果输入的传参个数不是2 
 then         ------那么 
   echo "/usr/local/src/ $0 请输入正确的值"  --输出一个/usr/local---路径加$0 $0表示输出运行脚本的名称 
 else 
   echo "输入正确" 
fi 

施行如下:

[root@yankerp src]# sh p.sh  
/usr/local/src/ p.sh 请输入正确的值 
[root@yankerp src]# sh p.sh zhangsan lisi 
输入正确 
[root@yankerp src]# 

澳门金沙国际 1

$* $@后续再出!!!

二、shell进度中至极状态变量

$?    $$(不常用)   $!(不常用)    $_(不常用)$$ 和
$!都以获得脚本进程号PID,不过有所差异这里不在演示

壹、$?特殊变量实施

[root@yankerp ~]# pwd 
/root 
[root@yankerp ~]# echo $? 
0 
[root@yankerp ~] 

当大家施行每一条命令结束后,echo $? 要是它输出0那么就代表成功

[root@yankerp ~]# sfkljlfsdfsdf 
bash: sfkljlfsdfsdf: 未找到命令... 
[root@yankerp ~]# echo $? 
127 
[root@yankerp ~]# 

非0则代表失利。

案例:安装Apache判定是不是安装成功

[root@yankerp ~]#yum install httpd -y

澳门金沙国际 2

案例二:通过脚本决定命令及脚本试行再次来到值

#!/bin/bash 
if [ "$#" -ne "3" ] 
 then 
  echo "/bin/bash $0" 请输出正确字符 
  exit 120  ---<如果以上不成立 并指定120值退出脚本 
 else 
  echo "输入正确" 
fi 

运作如下:

[root@yankerp ~]# sh k.sh  
/bin/bash k.sh 请输出正确字符 
[root@yankerp ~]# echo $? 
120 
[root@yankerp ~]#  
[root@yankerp ~]# sh k.sh zhangsan lisi wangwu 
输入正确 
[root@yankerp ~]# echo $? 
0 
[root@yankerp ~]#  

澳门金沙国际 3

宣示:以上作品是<<跟着老男孩学Linux运营Shell编制程序实战>>第陆章看完的下结论;

以上便是本文的全体内容,希望对大家的就学抱有协理,也期望大家多多协理脚本之家。

您大概感兴趣的稿子:

  • Shell编制程序中的特殊变量之进度状态变量介绍
  • Shell编制程序中的特殊变量之职责变量介绍

相关文章