Shell编程之特殊变量
$0 $# $n-->$[1..9] $* [email protected]
- $0:显示当前的脚本文件名,如果在执行脚本时添加了路径,那么全部都会输出
- $n:获取当前执行的shell脚本的第n个参数值比如:[n=1..9],如果N大于9那么就要使用{}来定义 比如${10}
- $#:获取当前shell脚本后面接的参数的个数
- $*:获取当前脚本的参数,不加引号和[email protected]是一样的 加了引号;例如"$*" 则表示单个字符串。相当于"$1 $2 $3"
- [email protected]:同样也是获取当前shell的参数,不加引号和$*是一样的,那么加了引号如:"[email protected]" 表示将所有的参数视为不同独立的字符串,相当于"$1" "$2"..
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]#
- [[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]#
- [[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]#
- [[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]#
- [[email protected] src]# echo \${1..15}
- $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
- [[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 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
- [[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]#
- [[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
- [[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
- [[email protected] src]# dirname /usr/local/src/y.sh
- /usr/local/src
- [[email protected] src]# basename /usr/local/src/y.sh
- y.sh
·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)$#特殊变量获取传参个数实践
- [[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]#
- #!/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]#
- #!/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]#
$* [email protected]后续再出!!!
二、shell进程中特殊状态变量
$? $$(不常用) $!(不常用) $_(不常用)$$ 和 $!都是获取脚本进程号PID,但是有所不同这里不在演示
1、$?特殊变量实践
- [[email protected] ~]# pwd
- /root
- [[email protected] ~]# echo $?
- 0
- [[email protected] ~]
- [[email protected] ~]# sfkljlfsdfsdf
- bash: sfkljlfsdfsdf: 未找到命令...
- [[email protected] ~]# echo $?
- 127
- [[email protected] ~]#
案例:安装Apache判断是否安装成功
[[email protected] ~]#yum install httpd -y
案例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] ~]#
http://blog.****.net/qq_39591494/article/details/79206282