当前位置:首页 > linux教程 > 列表

linux中shell 特殊变量$0 $n $* $@ $! $?的详解

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-21 14:51:29 浏览: 评论:0 

我们知道在shell命令中有很多的变量,今天下文要讲到的是特殊变量$0 $n $* $@ $! $?详解,希望下文能帮助到各位朋友哦.

$0:获取当前执行脚本的文件名,包括路径.

  1. [root@test script]# cat 0.sh  
  2. #!/bin/bash 
  3. echo $0 
  4. [root@test script]# sh 0.sh  
  5. 0.sh 
  6. [root@test script]# cat 0.sh  
  7. #!/bin/bash 
  8. dirname "$0" 
  9. basename "$0" 
  10. [root@test script]# sh /byrd/script/0.sh  
  11. /byrd/script 
  12. 0.sh 

$n:获取当前执行的shell脚本的第N个参数,n=1..9,当n为0时表示脚本的文件名,如果n大于9,用大括号括起来like${10}.

  1. [root@test script]# cat n.sh  
  2. #!/bin/bash 
  3. echo $1 $2 ${10} 
  4. [root@test script]# sh n.sh a b c d e f g h i j k l m n 
  5. a b j 
  6. [root@LAMP script]# sh n.sh {a..z} 
  7. a b j 
  8. [root@test script]# sh n.sh `seq 11`  
  9. 1 2 10 

$*:获取当前shell的所有参数,将所有的命令行参数视为单个字符串.

$@:这个程序的所有参数"$1" "$2" "$3" "...",这是将参数传递给其他程序的最佳方式,因此TA会保留所有内嵌在每个参数里的任何空白.

$#:获取当前shell命令行中参数的总个数。

  1. [root@test script]# cat hashtag.sh  
  2. #!/bin/bash 
  3. echo "$#" 
  4. [root@test script]# sh hashtag.sh  
  5. [root@test script]# sh hashtag.sh 1 2 3 
  6. [root@test script]# sh hashtag.sh `seq 300` 
  7. 300 
  8. [root@test script]# cat example.sh  
  9. #!/bin/bash 
  10. #Example 
  11. if [ $# -ne 2 ];then 
  12.     echo "Error, please enter two parameters." 
  13.     exit 1 
  14. else 
  15.     echo "You did a good job." 
  16. fi --phpfensi.com 
  17. [root@test script]# sh example.sh a  
  18. Error, please enter two parameters. 
  19. [root@test script]# sh example.sh a b 
  20. You did a good job. 
  21. [root@test script]# sh example.sh a b c 
  22. Error, please enter two parameters. 

$_:代表上一个命令的最后一个参数

$$:代表所在命令的PID

  1. [root@LAMP script]# cat dollar.sh  
  2. #!/bin/bash 
  3. echo "$$" >/tmp/dollar.pid 
  4. while true 
  5. do 
  6.     sleep 1 
  7. done 
  8. [root@LAMP script]# sh dollar.sh  
  9. ################################################ 
  10. [root@LAMP ~]# cat /tmp/dollar.pid  
  11. 1483 
  12. [root@LAMP ~]# ps -ef |grep 1483 
  13. root      1483  1453  0 14:58 pts/1    00:00:00 sh dollar.sh 
  14. root      1532  1483  0 14:58 pts/1    00:00:00 sleep 1 
  15. root      1534  1496  0 14:58 pts/0    00:00:00 grep 1483 
  16. [root@LAMP ~]# ps -ef |grep dollar 
  17. root      1483  1453  0 14:58 pts/1    00:00:00 sh dollar.sh 
  18. root      1555  1496  0 14:58 pts/0    00:00:00 grep dollar 

$!:代表最后执行的后台命令的PID

$?:代表上一个命令执行是否成功的标志,如果执行成功则$? 为0,否则不为0.

  1. [byrd@LAMP script]$ pwd 
  2. /byrd/script 
  3. [byrd@LAMP script]$ echo $? 
  4. 0    #运行成功 
  5. [byrd@LAMP script]$ ls /root 
  6. ls: cannot open directory /root: Permission denied 
  7. [byrd@LAMP script]$ echo $? 
  8. 2    #权限拒绝 
  9. [byrd@LAMP script]$ hahaha 
  10. -bash: hahaha: command not found 
  11. [byrd@LAMP script]$ echo $? 
  12. 127    #未找到该命令 
  13. ########################################### 
  14. [byrd@LAMP ~]$ cat /byrd/script/question_mark.sh  
  15. #!/bin/bash 
  16. #Example 
  17. ls -al /root >/dev/null 2>&1  
  18. if [ $? -eq 0 ];then 
  19.     echo "User is root" 
  20. else 
  21.     echo "The user is not root" 
  22. fi 
  23. [root@LAMP script]# sh question_mark.sh  
  24. User is root 
  25. [root@LAMP script]# su - byrd 
  26. [byrd@LAMP ~]$ sh /byrd/script/question_mark.sh  
  27. The user is not root

Tags: shell特殊变量 linux特殊变量

分享到: