SHELL脚本-第五课

回顾

  1. 区分了单引号和双引号的区别;
  2. 了解了更多的转义字符;
  3. 退出时的状态。

访问变量

变量使用得当,可以使脚本变得更加强大和有弹性。

内部变量

  1. $BASH:Bash二进制程序文件的路径;

  2. $BASH_ENV:该环境变量保存一个Bash启动文件路径,当启动一个脚本程序时会去读该环境变量指定的文件;

  3. $BASH_SUBSHELL:一个指示子shell(subshell)等级的变量;

  4. $BASH_VERSINFO[n]:这个数组含有6个元素,指示了安装的Bash版本的信息。它和$BASH_VERSION相似,但它们还是有一些小小的不同;

    #!/bin/bash
    for n in 0 1 2 3 4 5
    do
       echo "BASH_VERSINFO[$n] = ${BASH_VERSINFO[$n]}"
    done
    
    exit 0	
    

    运行结果如下:

    $ ./5-2-BashVersifo.sh
    BASH_VERSINFO[0] = 3 # 主版本号.
    BASH_VERSINFO[1] = 2 # 次版本号.
    BASH_VERSINFO[2] = 57 # 补丁级.
    BASH_VERSINFO[3] = 1 # 编译版本.
    BASH_VERSINFO[4] = release # 发行状态.
    BASH_VERSINFO[5] = x86_64-apple-darwin19 # 结构体系(和变量$MACHTYPE相同).

  5. $BASH_VERSION:安装在系统里的Bash版本。其中,检查$BASH_VERSION是检测哪个shell在运行的好办法。$SHELL变量不一定能给出正确的答案;

  6. $DIRSTACK:在目录堆栈里面最顶端的值;

  7. $EUID:有效用户ID;

  8. $FUNCNAME:当前函数的名字;

  9. $GLOBIGNORE:由通配符(globbing)扩展的一列文件名模式;

  10. $GROUPS:目前用户所属的组;

  11. $HOME:用户的家目录,通常是/home/username

  12. $HOSTNAME:在系统启动时由一个初始化脚本中用hostname命令给系统指派一个名字;

  13. $HOSTTYPE:机器类型;

  14. $IFS:内部字段分隔符;

  15. $IGNOREEOF:忽略EOF:在退出控制台前有多少文件结尾标识(end-of-files,control-D)会被shell忽略;

  16. $LC_COLLATE:它通常在.bashrc/etc/profile文件里被设置,它控制文件名扩展和模式匹配的展开顺序。如果设置不当,LC_COLLATE会在文件名通配符(filename globbing)里引起不可预料的结果;

  17. $LC_CTYPE:这个内部变量控制通配符(globbing)和模式匹配中的字符解释;

  18. LINENO:这个变量表示在本shell脚本中该变量出现时所在的行数。它只在脚本中它出现时有意义,它一般可用于调试;

  19. $MACHTYPE:机器类型;

  20. $OLDPWD:上一次工作的目录(“OLD-print-working-directory”,你上一次进入工作的目录);

  21. $OSTYPE:操作系统类型;

  22. $PATH:可执行程序文件的搜索路径。一般有/usr/bin/, /usr/X11R6/bin/, /usr/local/bin,等等;

  23. $PIPESTATUS:此数组变量保存了最后执行的前台管道的退出状态。相当有趣的是,它不一定和最后执行的命令的退出状态一样;

  24. $PPID:一个进程的$PPID变量保存它的父进程的进程ID(pid);

  25. $PROMPT_COMMAND:这个变量在主提示符前($PS1显示之前)执行它的值里保存的命令;

  26. $PS1:这是主提示符(第一提示符),它能在命令行上看见;

  27. $PS2:副提示符(第二提示符),它在期望有附加的输入时能看见。它显示像>的提示;

  28. $PS3:第三提示符。它在一个select循环里显示;

  29. $PS4:第四提示符,它在用-x选项调用一个脚本时的输出的每一行开头显示。它通常显示像+的提示;

  30. $PWD:工作目录(即你现在所处的目录);

  31. $REPLY:没有变量提供给read命令时的默认变量。这也适用于select命令的目录,但只是提供被选择的变量项目编号而不是变量本身的值;

  32. $SECONDS:脚本已运行的秒数;

  33. $SHELLOPTS:已经激活的shell选项列表,它是一个只读变量;

  34. $SHLVL:SHELL的嵌套级别。指示了Bash被嵌套了多深。在命令行里,$SHLVL是1,因此在一个脚本里,它是2;

  35. $TMOUT:如果$TMOUT环境变量被设为非零值时间值time,那么经过time这么长的时间后,shell提示符会超时.这将使此shell退出登录;

  36. $UID:用户ID号;

  37. $#:命令行参数或者是位置参数的数量;

  38. $*:所有的位置参数都被当成单个单元;

  39. $@:和$*相同,但每个参数都是一个引起的字符串;

  40. $-:(使用set命令)传给脚本的标记;

  41. $!:在后台运行的最后一个作业的PID(进程ID);

  42. $_:保存前一个命令最后一个参数的变量值;

  43. $?:一个命令,函数或脚本自身的退出状态码;

  44. $$:脚本本身的进程PID。

参考资料

发布了15 篇原创文章 · 获赞 0 · 访问量 341

猜你喜欢

转载自blog.csdn.net/u011228324/article/details/103944304