黑帽联盟

 找回密码
 会员注册
查看: 1410|回复: 0
打印 上一主题 下一主题

[基础服务] Linux中变量#,#,@,0,0,1,2,2,*,$$,$?的含义

[复制链接]
yun 黑帽联盟官方人员 

920

主题

37

听众

1364

积分

超级版主

Rank: 8Rank: 8

  • TA的每日心情
    奋斗
    2019-10-18 11:20
  • 签到天数: 678 天

    [LV.9]以坛为家II

    $# 是传给脚本的参数个数
    $0 是脚本本身的名字
    $1 是传递给该shell脚本的第一个参数
    $2 是传递给该shell脚本的第二个参数
    $@ 是传给脚本的所有参数的列表
    $* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
    $$ 是脚本运行的当前进程ID号
    $? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

    区别:@*

    • 相同点:都是引用所有参数
    • 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数(分别存储在112 3)则"3)则"*" 等价于 “112 3"(传递了一个参数);而“3"(传递了一个参数);而“@" 等价于 "1""1""2" "$3"(传递了三个参数)

    例子一
    1. ##dels.sh
    2. echo "number:$#"
    3. echo "scname:$0"
    4. echo "first :$1"
    5. echo "second:$2"
    6. echo "argume:$@"
    7. echo "show parm list:$*"
    8. echo "show process id:$$"
    9. echo "show precomm stat: $?"
    复制代码
    执行结果
    [@jihite]$ sh del.sh 1 2 3
    number:3
    scname:del.sh
    first: 1
    second:2
    argume:1 2 3
    show parm list:1 2 3
    show process id:21057
    show precomm stat: 0

    例子二
    1. #!/bin/sh
    2. num=$#
    3. name=$0
    4. echo "number:$num"
    5. echo "scname:$name"
    6. echo $0
    7. echo $1
    8. echo $2

    9. for ((i=0; i<$num; i++))
    10. do
    11.     echo "$i"
    12. done

    13. echo "argume:$@"
    14. for key in $@
    15. do
    16.     echo $key
    17. done
    18. echo "-----------------"
    19. for key in "$@"
    20. do
    21.     echo $key
    22. done
    23. echo "-----------------------------"
    24. for key2 in $*
    25. do
    26.     echo $key2
    27. done
    28. echo "-----------------"
    29. for key2 in "$*"
    30. do
    31.     echo $key2
    32. done

    33. echo "show process id:$$"
    34. cho
    35. echo "show precomm stat: $?"
    复制代码
    执行结果
    [@jihite]$ sh del.sh a b                                                      
    number:2
    scname:del.sh
    del.sh
    a
    b
    0
    1
    argume:a b
    a
    b
    -----------------
    a
    b
    -----------------------------
    a
    b
    -----------------
    a b
    show process id:23582
    del.sh: line 37: cho: command not found
    show precomm stat: 127


    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部