在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
$0 $# $n-->$[1..9] $* $@ 1、在shell中存在着一些特殊而又重要的变如:$1 $0 $#,我们称为特殊的位置变量要从命令行,函数,脚本,等传递参数时,就需要在shell脚本中使用位置参数变量
总结:$*和$@不加双引号 是没有任何区别的,有双引号两者就有区别 1)$1 $2 特殊变量实战 [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]# 例2: [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]# 例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 $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]# 同时也可以这样加双引号 如下: [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)当我们一个个的输入echo $1---15时会感觉很慢我们可以使用以下命令来接收命令传递的15个参数 [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 3)打印26个字母如下: [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功能:获取脚本的路径 例如: [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]# $* $@后续再出!!! 二、shell进程中特殊状态变量 $? $$(不常用) $!(不常用) $_(不常用)$$ 和 $!都是获取脚本进程号PID,但是有所不同这里不在演示 1、$?特殊变量实践 [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 ~]# 声明:以上文章是<<跟着老男孩学Linux运维Shell编程实战>>第四章看完的总结; 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持极客世界。 |
请发表评论