一起学Shell(十)之可称植性议题与扩展

#----------------------------------------------------------# 
# ====> 红色字体 -特指煮酒个人所见。加粗则为需要重点注意。 #
# ====> 蓝色加粗 -特指与本文相关人员,包括参与修正的朋友。 #
# ====> 煮酒品茶 -Http://cwtea.blog.51cto.com          #
#----------------------------------------------------------#

一起学Shell(十)之可称植性议题与扩展
煮酒品茶:Bashksh93差异以及共通扩展
Bashksh93差异以及共通扩展


  1. [root@localhost 10]# cat shell 
  2. set +o    #选项设置 
  3. (shopt -o) 2>/dev/null   #bash特定的选项,subshell会使ksh沉默 
  4. Set   #变量与值 
  5. export -p     #被导出的变量 
  6. readonly -p  #只读变量 
  7. trap      #捕捉设置 
  8. typeset -f    #函数自定义 
  9. } > /tmp/shell.state     #导出路径 
  10. [root@localhost 10]# ./shell 
  11. [root@localhost 10]# ./shell 
  12. [root@localhost 10]# cat /tmp/shell.state  
  13. set +o allexport 
  14. set -o braceexpand 
  15. set +o emacs 
  16. ............ 
  17. xtrace          off 
  18. BASH=/bin/bash 
  19. BASH_ARGC=() 
  20. BASH_ARGV=() 
  21. ................. 
  22. PS4='+ ' 
  23. PWD=/root/10 
  24. SHELL=/bin/bash 
  25. ....................... 

注:bashksh93定义函数时使用的语法不同。当你想在其中一个shell输出状态,然后在另一个shell里回复时,必须小心处理。

Echo不具可移植性

OPTIND可为本地端变量

${var:?message}可能不存在

for循环中,漏失循环项目

DEBUG捕捉,行为模式各异

Set的长与短选项:

一起学Shell(十)之可称植性议题与扩展

 一起学Shell(十)之可称植性议题与扩展

Bashshopt命令

 

一起学Shell(十)之可称植性议题与扩展

当它们设置时(启用时)的行为模式:

转自:http://blog.chinaunix.net/uid-11436705-id-107815.html 

选项含义 cdable_vars如果给cd内置命令的参数不是一个目录,就假设它是一个变量名,变量的值是将要转换到的目录cdspell纠正cd命令中目录名的较小拼写错误。检查的错误包括颠倒顺序的字符,遗漏的字符以及重复的字符。如果知道一处修改,正确的路径就打印出,命令将继续。只用于交互式shellcheckhashbash在试图执行一个命令前,先在哈希表中寻找,以确定命令是否存在。如果命令不存在,就执行正常路径搜索checkwinsizebash在每个命令后检查窗口大小,如果有必要,就更新LINES和COLUMNS的值cmdhistbash试图将一个多行命令的所有行保存在同一个历史项中。这使得多行命令的重新编辑更方便dotglobbash在文件名扩展的结果中包括以点(.)开头的文件名execfail如果一个交互式shell不能执行指定给exec内置命令作为参数的文件,它不会退出。如果exec失败,一个交互式shell不会退出 expand_aliases 别名被扩展。默认为打开 extglob打开扩展的模式匹配特征(正常的表达式元字符来自Korn shell的文件名扩展) histappend 当shell退出时,历史清单将添加到以HISTFILE变量的值命名的文件中,而不是覆盖文件 histreedit 如果readline正被使用,用户有机会重新编辑一个失败的历史替换 histverify如果设置,且readline正被使用,历史替换的结果不会立即传递给shell解析器。而是将结果行装入readline编辑缓冲区中,允许进一步修改 hostcomplete 如果设置,且readine正被使用,当正在完成一个包含@的词时bash将试图执行主机名补全。默认为打开 huponexit 如果设置,当一个交互式登陆shell退出时,bash将发送一个SIGHUP(挂起信号)给所有的作业 interactive_comments 在一个交互式shell中,允许以#开头的词以及同一行中其他的字符被忽略。默认为打开 lithist 如果打开,且cmdhist选项也打开,多行命令将用嵌入的换行符保存到历史中,而无需在可能的地方用分号来分隔 mailwarn 如果设置,且bash用来检查邮件的文件自从上次检查后已经被访问,将显示消息“The mail in mailfile has been read” nocaseglob 如果设置,当执行文件名扩展时,bash在不区分大小写的方式下匹配文件名 nullglob如果设置,bash允许没有匹配任何文件的文件名模式扩展成一个空串,而不是它们本身 promptvars 如果设置,提示串在被扩展后再经历变量和参量扩展。默认为打开 restricted_shell 如果shell在受限模式下启动就设置这个选项。该值不能被改变。当执行启动文件时,不能复位该选项,允许启动文件发现shell是否是受限的 sourcepath如果设置,source内置命令使用PATH的值来寻找包含作为参数提供的文件的目录。默认为打开 source 点(.)的同义词 shift_verbose如果该选项设置,当移动计数超过位置参量个数时,shift内置命令将打印一个错误消息 

共通的扩展

Select循环:
Select name [in list]
Do 

可以使用$name的语句....

Done

for具有相同的语法,只是关键字不同

行为模式:

1、list里的每个项目产生选单,将每个选择格式化为数字

2、显示PS3的值作为提示符号,并等待用户输入一数字

3、存储选定的选择在变量name中,以及存储选定的数字在内置变量REPLY

4、执行主体内的语句

5、持续重复处理程序


  1. [root@localhost 10]# cat select 
  2. PS3='terminal?' 
  3. select term in g135a t2000 s531 vt99 
  4. do 
  5. if [ -n "$term" ] 
  6. then 
  7. TERM=$term 
  8. echo TERM is $TERM 
  9. export TERM 
  10. break  
  11. else 
  12. echo 'invalid.' 
  13. fi  
  14. Done 
  15. [root@localhost 10]# ./select  
  16. 1) g135a 
  17. 2) t2000 
  18. 3) s531 
  19. 4) vt99 
  20. terminal?3 
  21. TERM is s531 

内置shell变量PS3包括select使用的提示字符串,其默认值为"#? "

扩展性Test工具

Ksh提出扩展性test工具,以[[]]呈现,

注:``.``.``与一般test[...]命令不同之处在于不处理单词展开与样式展开(通配字符)。意即它不需要使用引号以处理引文操作。

一起学Shell(十)之可称植性议题与扩展

 一起学Shell(十)之可称植性议题与扩展

扩展性样式比对 

一起学Shell(十)之可称植性议题与扩展

煮酒品茶:好像不能使用吖,应该是我没整明白。

括弧展开



  1. [root@localhost 10]# echo cwtea{1,2,3}.nice 
  2. cwtea1.nice cwtea2.nice cwtea3.nice 

进程替换

索引式数组

各类扩展

~用户根目录,~+当前目录,~-上一目录



  1. [root@localhost 10]# mkdir -p old new 
  2. [root@localhost 10]# ls 
  3. new  old 
  4. [root@localhost 10]# cd new 
  5. [root@localhost new]# ls 
  6. [root@localhost new]# cd ~+ 
  7. [root@localhost new]# cd ../old 
  8. [root@localhost old]# cd ~- 

算术命令 $((...))标记作为算术展开,但不提供任何其他算术操作的机制。

算术的for循环

附加的算术运算符

Case语句的可选用圆括弧比对

Trap -p显示捕捉

使用<<<的即席字符串

扩展性字符串标记



  1. [root@localhost new]# echo $'a\tb' 
  2. a   b 
  3. [root@localhost new]# echo $'a\nb' 

 一起学Shell(十)之可称植性议题与扩展

下载信息:

Bash:wgetftp

<>





本文转自 煮酒品茶 51CTO博客,原文链接:http://blog.51cto.com/cwtea/880881,如需转载请自行联系原作者
上一篇:Chrome 发现漏洞:可盗版媒体视频资源


下一篇:查找两个文件包含的字符串或不包含的字符串shell脚本