在实践shell脚本时方可传递参数:

8.传递参数
    1.选择$n来传递参数($0代表文件名)
    例子:
    echo “执行的文件名:$0”;
    echo “第三个参数为:$1”;
    echo “第二个参数为:$3”;

Shell编制程序:特殊变量介绍,shell编制程序变量

一 、在shell中设有着一些特殊而又注重的变如:$1 $0
$#,大家誉为特殊的职责变量要从命令行,函数,脚本,等传递参数时,就须求在shell脚本中应用地点参数变量

$0:展现当前的台本文件名,倘使在实施脚本时添加了路线,那么任何都会输出

$n:获取当前实行的shell脚本的第n个参数值比如:[n=1..9],假如N大于9那么就要接纳{}来定义
比如${10}

$#:获取当前shell脚本后边接的参数的个数

$*:获取当前剧本的参数,不加引号和[email protected]是相同的
加了引号;例如”$*” 则意味着单个字符串。也正是”$1 $2 $3″

[email protected]:同样也是得到当前shell的参数,不加引号和$*是千篇一律的,那么加了引号如:”[email protected]”
表示将有所的参数视为区别独立的字符串,也正是”$1″ “$2”..
总结:$*和[email protected]不加双引号
是没有别的差距的,有双引号两者就有分别

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

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

例2:

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

例3:

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

例4:在本子中添加$1 $2测试:

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

并且也能够那样加双引号 如下:

[[email protected] src]# cat test.sh #查看脚本的内容
#!/bin/bash
echo $1 $2
[[email protected] src]# source test.sh "zhangsan lisi" yankai #""表示一个字符串 
zhangsan lisi yankai    #输出结果
[[email protected] src]#

2)当大家3个个的输入echo
$1—15时会深感极慢大家能够使用以下命令来采纳命令传递的15个参数

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

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

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

我们在本子第三行加入echo

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

3)打字与印刷2陆个字母如下:

[[email protected] 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个参数

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

当地点参数大于9时 下边已经提到了大家得以接纳{}来定义如下:

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

再次·执行

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

4)$0特殊变量实战

[[email protected] src]# cat y.sh 
#!/bin/bash
echo $0

当我们不带路径运营脚本,它会打字与印刷脚本的称号,如下:

[[email protected] src]# sh y.sh 
y.sh

当大家带相对路径来实施脚本时,它会输出路径+脚本名

[[email protected] src]# sh /usr/local/src/y.sh 
/usr/local/src/y.sh

介绍dirname —- basename

[[email protected] src]# dirname /usr/local/src/y.sh 
/usr/local/src
[[email protected] src]# basename /usr/local/src/y.sh 
y.sh

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

·basename:获取脚本的称呼

例如:

[[email protected] src]# cat y.sh 
#!/bin/bash
dirname $0
basename $0
[[email protected] src]# sh /usr/local/src/y.sh 
/usr/local/src
y.sh
[[email protected] src]#

5)$#linux_shell_传递参数,Shell编程之特殊变量的笔记小结。新鲜变量获取传参个数实践

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

实例1:条件表达式判断语句如下:

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

运转脚本如下:

[[email protected] src]# sh p.sh 
请输出正确的数值
[[email protected] src]# sh p.sh zhangsan lisi
输入正确
[[email protected] src]#

IF语句判断如下:

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

履行如下:

[[email protected] src]# sh p.sh 
/usr/local/src/ p.sh 请输入正确的值
[[email protected] src]# sh p.sh  zhangsan lisi
输入正确
[[email protected] src]#

澳门金沙国际 1
$*
[email protected]继承再出!!!

② 、shell进度中卓越状态变量

$? $$(不常用) $!(不常用) $_(不常用)$$ 和
$!都以获得脚本进度号PID,但是有所不相同那里不在演示

一 、$?特殊变量实践

[[email protected] ~]# pwd
/root
[[email protected] ~]# echo $?
0
[[email protected] ~]

当大家实施每一条命令停止后,echo $? 借使它输出0那么就代表成功

[[email protected] ~]# sfkljlfsdfsdf
bash: sfkljlfsdfsdf: 未找到命令...
[[email protected] ~]# echo $?
127
[[email protected] ~]#

非0则象征失利。

案例:安装Apache判断是还是不是安装成功

[[email protected]
~]#yum install httpd -y

澳门金沙国际 2

案例2:通过脚本决定命令及脚本执行重返值

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

运营如下:

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

澳门金沙国际 3

一 、在shell中留存着有个别非凡而又重视的变如:$1 $0
$#,我们称为特殊的职位变量要从命令行,函数,…

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

  脚本获取参数的格式为:$0  $1  $2 …里边$1 为传送的首先个参数  而$0
接受的是./test.sh 那几个事物

     ./test.sh 1 2
    输出结果为:
    执行的文书名:test.sh
    第③个参数为:1
    首个参数为:2
2.特殊字符处理参数(那其间分别尚未测试)
    $# : 传递到剧本的参数的个数
    $* : 以二个字眼符串显示全体向脚本传递的参数(“$*”以”$1 $2 …
$n”)
    $$ : 脚本运维的脚下进度的ID号
    $! : 后台运维的末段一个历程的ID号
    $@ : 与$*一样,但是利用的时候加引号(“$@”以”$1” “$2” … “$n”)
    $- : 显示Shell使用的日前增选,与set命令功用雷同
    $? : 显示最终命令的退出状态.0表示并未不当,别的任何值表名有不当
3.例子:
    echo “Shell 传递参数实例!”;
    echo “第3个参数为: $1”;
    echo “参数的个数为: $#”;
    echo “传递的参数作为三个字符串突显: $*”;

壹 、在shell中存在着部分奇特而又器重的变如:$1 $0
$#,大家誉为特殊的职位变量要从命令行,函数,脚本,等传递参数时,就供给在shell脚本中利用地方参数变量

代码:例:

    ./test.sh 1 2 3
    输出结果为:
    shell 传递参数实例!
    第一个参数: 1
    参数个个数为: 3
    传递的参数作为三个字符串显示: 1 2 3
4.$*与$@区别:
    相同点:都以援引全部参数
    分裂点:唯有在双引号中突显出来.假诺在本子运维时写了七个参数1 2 3
,则”*”等价与”1 2 3″,而”#”等价于”1″ “2” “3”
5.实例:
    for i in “$*”; do
       echo $i
    done

  1. $0:呈现当前的本子文件名,假使在履行脚本时添加了路径,那么万事都会输出
  2. $n:获取当前实践的shell脚本的第n个参数值比如:[n=1..9],借使N大于9那么就要接纳{}来定义
    比如${10}
  3. $#:获取当前shell脚本前面接的参数的个数
  4. $*:获取当前剧本的参数,不加引号和$@是如出一辙的 加了引号;例如”$*”
    则意味单个字符串。也便是”$1 $2 $3″
  5. $@:同样也是获取当前shell的参数,不加引号和$*是平等的,那么加了引号如:”$@”
    表示将有着的参数视为不一致独立的字符串,相当于”$1″ “$2”..
#!/bin/bash
echo "1--"$0
echo "2--"$1
echo "3--"$2

    for i in “$@”; do
       echo $i
    done

总结:$*和$@不加双引号 是没有其他差距的,有双引号两者就有分别

运转结果:

    ./test.sh 1 2 3
     执行结果:
     1 2 3
    1
    2
    3
    可以看到@使用for是自带换行

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

 澳门金沙国际 4

9.数组(Bash
Shell只辅助一维数组,数组成分的下标由0起始,Shell数组用括号表示,成分用空格分开)
     1.语法格式:
        array_name=(value1 … valuen)
        例:my-array=(A B “C” D)
2.定义数组
       array_name[0]=value0
       array_name[1]=value1
      array_name[2]=value2
3.读取数组
      ${array_name[index]}
4.取得数组中的全部因素
     ${array_name[*]}
     ${array_澳门金沙国际,name[@]}
5.赢得数组的长短
    ${#array_name[*]}
    ${#array_name[@]}

[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]# 

  注意:我们能够见到本人运营时前面传了七个参数  
11  22  不过接受时$0接的是  ./test.sh $1 $2接收的才是真的的参数。

 

例2:

  此外还有多少个独特字符用来拍卖参数:

做的实例1:

[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]#  

澳门金沙国际 5

#!/bin/bash

例3:

  $#用例:

#使用$*输出
echo “使用星号输出:”
for i in “$*”; do
echo $i
done

[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]# 
echo "1--"$0
echo "2--"$1
echo "3--"$2
echo "------"$#

#使用$@输出
echo “使用第两种艺术开始展览输出:”
for j in “$@”; do
echo $j
done

例4:在本子中添加$1 $2测试:

运维结果:

做的实例2:

[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]# 

澳门金沙国际 6

#!/bin/bash
#Shell参数字传送递
echo “—-测试参数字传送递的事例:—–“;
echo “执行的文本名为 : $0”;
echo “第二个参数为 : $1”;
echo “第四个参数为 : $2”;

再就是也可以这么加双引号 如下:

从图中能够观察末了一行输出的值 2 就是参数的个数

#特殊字符处理参数,$*与$@的不同
echo “—-测试特殊字符处理参数:—-“;
echo “参数的个数为 : $#”;
echo “字符串的方式显得 : $*”;
echo “字符串的款式显示2 : $@”;

[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]# 

   $*用例:

#数组的内容
echo “—-测试数组的主干采取—-“
my_arr=(A B “C” D);
my_arr2[0]=$1;
my_arr2[1]=$2;
my_arr2[2]=$3;
echo “读取数组:${my_arr[3]}”;
echo “数组中的全体因素:${my_arr[*]}”;
echo “数组中的全体因素2:${my_arr[@]}”;
echo “数组my_arr的数首席执行官度为:${#my_arr[*]}”;
echo “数组my_arr2的数CEO度为:${#my_arr2[@]}”;
echo “数组my_arr2的成套因素为:${my_arr2[*]}”;

2)当我们三个个的输入echo
$1—15时会深感极慢大家可以利用以下命令来选取命令传递的拾八个参数

echo "1--"$0
echo "2--"$1
echo "3--"$2
echo "------"$*

 

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

运维结果:

将出口的内容导入到test.sh文件中

澳门金沙国际 7

[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]# 

从中看到输出的“11 22”是单字符串的。

大家在剧本第贰行参与echo

  $@和$*用法一样的,区别在于前者是把各类参数分开的,而后者是把拥有参数作为二个单词符串

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

 

3)打字与印刷二十二个字母如下:

[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]# 

当地点参数大于9时 下边已经涉及了我们能够使用{}来定义如下:

[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 

4)$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]# 

实例1:条件表明式判断语句如下:

#!/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]# 

澳门金沙国际 8

$* $@后续再出!!!

② 、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

澳门金沙国际 9

案例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 ~]#  

澳门金沙国际 10

宣示:以上小说是<<跟着老男孩学Linux运维Shell编制程序实战>>第④章看完的总括;

上述正是本文的全体内容,希望对大家的就学抱有帮衬,也冀望大家多多帮助脚本之家。

您或然感兴趣的稿子:

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

相关文章