shell特殊变量(2)

  1. $* 与 $@
    在这里插入图片描述
# $*  与 $@ 基础  
[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

在这里插入图片描述

发布了58 篇原创文章 · 获赞 52 · 访问量 1238

猜你喜欢

转载自blog.csdn.net/ljaixiaoxue/article/details/104008568