- $* 与 $@
# $* 与 $@ 基础
[root@manager /server/scripts]# cat 2.5-1-arg.sh
#!/bin/bash
#echo ${1} ${2}
#echo ${1} ${2} ${3} ${4} ${5} ${6} ${7} ${8} ${9} ${10} ${11} ${12}
#echo $0
#echo "Usage: $0 {start|stop|restart}" echo $1 $2
$# echo $*
echo $@
[root@manager /server/scripts]# sh 2.5-1-arg.sh {a..z}
a b 26
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
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
# $* $@ 进阶应用案例 一般配合 for循环一起使用
for n in 1 2 3 4 5 $*
do
done
sh 脚本 {a..z}
echo oldboy a
echo oldboy b
.....
[root@manager /server/scripts]# cat 2.5-2-xing.sh #!/bin/bash #author: lidao
#url: oldboyedu.com
for n in $*
do
echo oldboy $n
done
[root@manager /server/scripts]# sh 2.5-2-xing.sh {a..z}
oldboy a
oldboy b
oldboy c
oldboy d
oldboy e
oldboy f
oldboy g
oldboy h
oldboy i
oldboy j
oldboy k
oldboy l
oldboy m
oldboy n
oldboy o
oldboy p
oldboy q
oldboy r
oldboy s
oldboy t
oldboy u
oldboy v
oldboy w
oldboy x
oldboy y
oldboy z
for n in a b c d e f g ... z
do
echo oldboy $n
done
- $*和 $@
#set 可以设置命令行参数
[root@manager ~]# set oldboy alex
[root@manager ~]# echo $1
oldboy
[root@manager ~]# echo $2
alex
# 通过set 测试 $* $@ 区别
[root@manager ~]# set oldboy oldbing oldlidao oldguo [root@manager ~]# for n in "$*"; do echo $n; done
oldboy oldbing oldlidao oldguo
[root@manager ~]# for n in $*; do echo $n; done
oldboy
oldbing
oldlidao
oldguo
[root@manager ~]# for n in $@ ; do echo $n; done
oldboy
oldbing
oldlidao
oldguo
[root@manager ~]# for n in "$@" ; do echo $n; done
oldboy
oldbing
oldlidao
oldguo
# 了解: $@ "$@" 区别
[root@manager ~]# set "I am" oldboy linux teacher
[root@manager ~]# echo $#
4
[root@manager ~]# for n in $@ ; do echo $n; done
I
am
oldboy
linux
teacher
[root@manager ~]# for n in "$@" ; do echo $n; done
I am
oldboy
linux
teacher
- 小结
- $* $@ 取出脚本所有参数 一般配合for循环使用
- $* $@ 区别
##检查指定进程 pid 进程是否存在
for i in $* ; do
[ -d "/proc/$i" ] && return 0
done
checkpid() {
local i
for i in $* ; do
[ -d "/proc/$i" ] && return 0
done
return 1
}
5 位置参数小结
表示状态变量
1)$?
# $? 上1个命令或脚本 返回值
#简单含义 与 应用
##0 表示成功
##非0 表示故障 失败
[root@manager ~]# ls
ansible_playbook ansible_tasks student.txt
ansible-project1 ansible_variables
yj.sh
ansible_role ansible_variableszip.zip ansible_role_2019-12-23.zip ssh-key.sh
[root@manager ~]# echo $? 0
#应用
##与判断 结合 检查命令 脚本执行是否成功
#ping wget 。。。。
[ "$?" -eq 0 ] #equal 等于 判断返回值如果是0 则xxx
- 小结
- $? 配合判断 检查命令 脚本 执行是否成功
2) $$
# $$ 当前脚本的pid 进程id
###pid文件
[root@manager ~]# systemctl start nginx
[root@manager ~]#
[root@manager ~]# ps -ef |grep nginx
root 8504 1 0 11:33 ? 00:00:00
nginx: master process /usr/sbin/nginx
nginx 8505 8504 0 11:33 ? 00:00:00
nginx: worker process
root 8507 7560 0 11:33 pts/0 00:00:00 grep --color=auto nginx
[root@manager ~]# #kill 8504
[root@manager ~]# cat /run/nginx.pid 8504
[root@manager ~]# kill `cat /run/nginx.pid`
[root@manager ~]# ps -ef |grep nginx root 8519 7560 0 11:35 pts/0 00:00:00 grep --color=auto nginx
### 手动创建pid文件
[root@manager ~]# cat /server/scripts/2.5-3-pid.sh
#!/bin/bash
#author:oldboy lidao
echo $$
sleep 9999
[root@manager ~]#
[root@manager ~]# sh /server/scripts/2.5-3-pid.sh 8578 [root@manager ~]# ps -ef |grep 8578
root 8578 7560 0 11:36 pts/0 00:00:00 sh /server/scripts/2.5-3-pid.sh
root 8579 8578 0 11:36 pts/0 00:00:00
sleep 9999
root 8581 7493 0 11:37 pts/2 00:00:00 grep --color=auto 8578
[root@manager ~]#
[root@manager ~]# echo oldboy oldboy
[root@manager ~]# echo oldboy |tee oldboy.txt oldboy
[root@manager ~]# cat oldboy.txt oldboy [root@manager ~]# #tee 多向输出 前面的信息输出屏幕 同时写入 到文件 `
[root@manager ~]# cat /server/scripts/2.5-3-pid.sh
#!/bin/bash
#author:oldboy lidao
echo $$ |tee /run/lidao.pid
sleep 9999
[root@manager ~]# sh /server/scripts/2.5-3-pid.sh
8589
[root@manager ~]# cat /run/lidao.pid
8589
- 小结:
- $$ 在 脚本中获取脚本的pid 创建pid仓库
3) $_
[root@manager ~]# cat /etc/sysconfig/networkscripts/ifcfg-eth0 TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=bbd5d2ac-55cf-41d4-a65e-73fb40655b21
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.61
PREFIX=24
GATEWAY=10.0.0.254
DNS1=10.0.0.254
IPV6_PRIVACY=no
ZONE=public
[root@manager ~]#
[root@manager ~]#
[root@manager ~]#
[root@manager ~]#
[root@manager ~]# echo $_ /etc/sysconfig/network-scripts/ifcfg-eth0