shell 中重要的 位置变量 $0,$#, $? $$ $_ $* $@
(1) $0 表示脚本的名称
使用场景:
echo "Usage: $0 {start|stop|status|restart|force-reload}"
(2)$n 表示脚本的第n 个参数 (1,2,3,4)
0被名称占用 所以从1开始 $1 为脚本第一个参数 $2 为脚本的第二个参数
echo $1 $2 ${10} ${11}
(3) $# 表示脚本传参个数
echo $#
应用场景:控制用户传参的个数
#!/bin/bash
if [ $# -ne 2 ]
then
echo "必须输入2个参数"
exit
fi
(4) $? 表示上一条命令的执行结果 0为成功 非0失败
案例:
#!/bin/bash
yum -y install wget &>/dev/null
[ $? -eq 0 ] && echo "wget安装成功...." || echo "wget安装失败...."
[root@lb day01]# cat ping.sh
#!/bin/bash
ping -c1 -W1 $1 &>/dev/null
[ $? -eq 0 ] && echo "$1 ping的通" || "$1 ping不通"
(5)$$ 表示获取脚本的pid
#!/bin/bash
echo $$ > /tmp/nginx.pid
(6)$* 获取脚本的所有参数 在循环体中加双引号把所有的参数作为一个参数
$* 和 $@ 都是 获取所有参数 (了解即可)
[root@lb day01]# for i in "a b" c;do echo $i;done
a b
c
[root@lb day01]# set -- "a b" c
[root@lb day01]# echo $*
a b c
[root@lb day01]# echo $@
a b c
[root@lb day01]# echo "$*"
a b c
[root@lb day01]# echo "$@"
a b c
[root@lb day01]# for i in $*;do echo $i;done
a
b
c
[root@lb day01]# for i in $@;do echo $i;done
a
b
c
[root@lb day01]# for i in "$*";do echo $i;done
a b c
[root@lb day01]# for i in "$@";do echo $i;done
a b
c
$* 获取脚本的所有参数 在循环体中加双引号把所有的参数作为一个参数
$@ 获取脚本的所有参数 在循环体中加上引号把所有的参数作为独立的参数
欢迎来撩 :shell 编程从0到1