找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 9482|回复: 2

Linux Shell常用技巧(十一)

[复制链接]
发表于 2012-4-21 10:22:41 | 显示全部楼层 |阅读模式
  1. 二十二. 交互式使用Bash Shell:
  2.     1.  用set命令设置bash的选项:
  3.     下面为set主要选项的列表及其表述:
  4. 选项名        开关缩写        描述
  5. allexport        -a        打开此开关,所有变量都自动输出给子Shell。
  6. noclobber        -C        防止重定向时文件被覆盖。
  7. noglob        -d        在路径和文件名中,关闭通配符。
  8.     #打开该选项
  9.     /> set -o allexport   #等同于set -a
  10.     #关闭该选项
  11.     /> set +o allexport  #等同于set +a
  12.     #列出当前所有选项的当前值。
  13.     /> set -o
  14.     allexport         off
  15.     braceexpand   on
  16.     emacs             on
  17.     errexit            off
  18.     errtrace          off
  19.     functrace        off
  20.     hashall            on
  21.     histexpand      on
  22.     ... ...
  23.     /> set -o noclobber     #打开noclobber选项,防止在重定向时原有文件被覆盖。
  24.     /> date > outfile         #通过date命令先生成一个文件outfile。
  25.     /> ls > outfile             #将ls命令的输出重定向到该文件outfile,shell将提示不能覆盖已经存在的文件。
  26.     -bash: outfile: cannot overwrite existing file
  27.     /> set +o noclobber    #关闭noclobber选项。
  28.     /> ls > outfile             #重新将ls的输出重定向到outfile,成功。
  29.     2.  变量:
  30.     设置局部变量:
  31.     /> name="stephen liu"  #注意等号两边不要有空格,如果变量值之间存在空格,则需要用双引号括起
  32.     /> echo $name
  33.     stephen liu
  34.     /> name=                    #将变量设置为空时,等号后面也不要有空格,直接回车即可。
  35.     /> echo $name             #name变量为空,因此echo不会有任何输出。
  36.     注意:以上变量的声明方式均可替换为declare variable=value的形式。
  37.     /> declare name="stephen liu"
  38.     /> readonly name         #将name变量设置为只读。
  39.     /> echo $name
  40.     stephen liu
  41.     /> name="my wife"      #如果针对只读变量重新赋值,将报错,提示name是只读变量。
  42.     -bash: name: readonly variable
  43.     /> unset name             #如果unset只读变量,将同样报错,提示不能unset只读变量。
  44.     -bash: unset: name: cannot unset: readonly variable
  45.     设置全局/环境变量:
  46.     在当前Shell中创建的全局/环境变量可以直接传递给它所有的子Shell,当前创建环境变量的Shell被称为夫Shell。
  47.     /> export allname=john         #利用export命令,将其后声明的变量置为环境变量
  48.     /> bash                                #启动一个新的子Shell
  49.     /> echo $allname                  #在子Shell中echo变量$allname,发现夫Shell中设置的值被传递到子Shell
  50.     john
  51.     /> declare -x allname2=peter #这里的功能和结果都是和上面的命令相同,只是利用declare -x命令设置环境变量
  52.     /> bash
  53.     /> echo $allname2
  54.     peter
  55.     下面的列表将给出常用的内置Shell环境变量:
  56. 变量名        含义
  57. BASH        表示bash命令的完整路径名。
  58. ENV        在启动新bash shell时执行的环境文件名。
  59. HOME        主目录。
  60. LANG        本地化语言。
  61. PATH        命令搜索路径,彼此之间冒号分隔。
  62. PPID        父进程PID。
  63. PWD        当前工作目录,用cd命令设置。
  64.     3.  echo命令:
  65.     该命令主要用于将其参数打印到标准输出。其中-e选项使得echo命令可以无限制地使用转义序列控制输出的效果。下面的列表给出常用的转义序列。
  66. 转义序列        功能
  67. \c        不换行打印
  68. \n        换行
  69. \t        制表符
  70. \\        反斜杠
  71.     echo还提供了一个常用的-n选项,其功能不输出换行符。
  72.     /> echo The username is $LOGNAME
  73.     The username is stephen
  74.     #下面命令的输出中的“/>”表示命令行提示符。
  75.     /> echo -e "\tHello World\c"
  76.         Hello World />
  77.     /> echo -n "Hello World"
  78.     Hello World />
  79.     4.  printf命令:
  80.     该命令和C语言中的printf函数的功能相同,都用用来格式化输出的。格式包括字符串本身和描述打印效果的字符。定义格式的方法和C语言也是完全一样的,即在%后面跟一个说明符,如%f表示后面是一个浮点数,%d表示一个整数。printf命令也同样支持转义序列符,其常用转义序列如下:
  81. 转义序列        功能
  82. \c        不换行打印
  83. \n        换行
  84. \t        制表符
  85. \\        反斜杠
  86. "        双引号
  87.     其常用的格式化说明符列表如下:
  88. 说明符        描述
  89. %c        ASCII字符
  90. %d,%i        十进制整数
  91. %f        浮点格式
  92. %o        不带正负号的八进制值
  93. %s        字符串
  94. %u        不带正负号的十进制值
  95. %x        不带正负号的十六进制值,其中使用a-f表示10-15
  96. %X        不带正负号的十六进制值,其中使用A-F表示10-15
  97. %%        表示%本身
  98.     下面是printf的一些常用使用方式:
  99.     /> printf "The number is %.2f.\n" 100   这里.2f表示保留小数点后两位
  100.     The number is 100.00.
  101.     #%-20s表示一个左对齐、宽度为20个字符字符串格式,不足20个字符,右侧补充相应数量的空格符。
  102.     #%-15s表示一个左对齐、宽度为15个字符字符串格式。
  103.     #%10.2f表示右对齐、10个字符长度的浮点数,其中一个是小数点,小数点后面保留两位。
  104.     /> printf "%-20s%-15s%10.2f\n" "Stephen" "Liu" 35
  105.     Stephen             Liu                 35.00
  106.     #%10s表示右对齐、宽度为10的字符串,如不足10个字符,左侧补充相应数量的空格符。
  107.     /> printf "|%10s|\n" hello
  108.     |     hello|
  109.     在printf中还有一些常用的标志符,如上面例子中的符号(-),这里我们在介绍一个比较常用的标识符"#"
  110.     #如果#标志和%x/%X搭配使用,在输出十六进制数字时,前面会加0x/0X前缀。
  111.     /> printf "%x %#x\n" 15 15
  112.     f 0xf
  113.    5.  变量替换运算符:
  114.     bash中提供了一组可以同时检验和修改变量的特定修改符。这些修改符提供了一个快捷的方法来检验变量是不是被设置过,并把输出结果输出到一个变量中,见下表:
  115. 修改符        描述        用途
  116. ${variable:-word}        如variable被设置且非空,则返回该值,否则返回word,变量值不变。        如变量未定义,返回默认值。
  117. ${variable-word}        如variable未被设置,则返回word,变量值不变,如果设置变量,则返回变量值,即使变量的值为空值。        如变量未设置,返回默认值。
  118. ${variable:=word}        如variable被设置且非空,则返回该值,否则设置变量为word,同时返回word。        如果变量未定义,则设置其为默认值。
  119. ${variable=word}        如variable未设置,则设置变量为word,同时返回word,如果variable被设置且为空,将返回空值,同时variable不变。否则返回variable值,同时variable不变。        如果变量未设置,则设置其为默认值。
  120. ${variable:+word}        如variable被设置且非空,则返回word,否则返回null,变量值不变。        用于测试变量是否存在。
  121. ${variable+word}        如variable被设置(即使是空值),则返回word,否则返回空。        用于测试变量是否设置。
  122. ${variable:?word}        如variable被设置且非空,则返回该值,否则显示word,然后退出Shell。如果word为空,打印"parameter null or not set"        为了捕捉由于变量未定义所导致的错误。
  123. ${variable:offset}        从variable的offset位置开始取,直到末尾。         
  124. ${variable:offset:length}        从variable的offset位置开始取length个字符。         
  125.     #${variable:-word}的示例,其C语言表示形式为:
  126.     #    if (NULL == variable)
  127.     #        return word;
  128.     #    else
  129.     #        return $variable;
  130.     /> unset var_name                        #将变量var_name置为空。
  131.     /> var_name=
  132.     /> echo ${var_name:-NewValue}    #var_name为空,因此返回NewValue
  133.     NewValue
  134.     /> echo $var_name                        #var_name的值未变化,仍然为空。
  135.     /> var_name=OldValue                   #给var_name赋值。
  136.     /> echo ${var_name:-NewValue}    #var_name非空,因此返回var_name的原有值。
  137.     OldValue
  138.     /> echo $var_name                        #var_name的值未变化,仍然OldValue。
  139.     OldValue
  140.     #${variable-word}的示例,其伪码表示形式为:
  141.     #    if (variable is NOT set)
  142.     #        return word;
  143.     #    else
  144.     #        return $variable;
  145.     /> unset var_name                         #取消该变量var_name的设置。
  146.     /> echo ${var_name-NewValue}    #var_name为空,因此返回NewValue
  147.     NewValue
  148.     /> echo $var_name                        #var_name的值未变化,仍然为空。
  149.     /> var_name=OldValue                   #给var_name赋值,即便执行var_name=,其结果也是一样。
  150.     /> echo ${var_name-NewValue}    #var_name非空,因此返回var_name的原有值。
  151.     OldValue
  152.     /> echo $var_name                        #var_name的值未变化,仍然OldValue。
  153.     OldValue
  154.    
  155.     #${variable:=word}的示例,其C语言表示形式为:
  156.     #    if (NULL == variable) {
  157.     #        variable=world;
  158.     #        return word;
  159.     #    } else {
  160.     #        return $variable;
  161.     #    }
  162.     /> unset var_name                        #将变量var_name置为空。
  163.     /> var_name=
  164.     /> echo ${var_name:=NewValue}   #var_name为空,设置变量为NewValue同时返回NewValue。
  165.     NewValue
  166.     /> echo $var_name                        #var_name的值已经被设置为NewValue。
  167.     NewValue
  168.     /> var_name=OldValue                  #给var_name赋值。
  169.     /> echo ${var_name:=NewValue}   #var_name非空,因此返回var_name的原有值。
  170.     OldValue
  171.     /> echo $var_name                       #var_name的值未变化,仍然OldValue。
  172.     OldValue
  173.    
  174.     #${variable=word}的示例,其伪码表示形式为:
  175.     #    if (variable is NOT set) {
  176.     #        variable=world;
  177.     #        return word;
  178.     #    } else if (variable == NULL) {
  179.     #        return $variable;  //variable is NULL
  180.     #    } else {
  181.     #        return $variable;
  182.     #    }
  183.     /> unset var_name                        #取消该变量var_name的设置。
  184.     /> echo ${var_name=NewValue}  #var_name未被设置,设置变量为NewValue同时返回NewValue。
  185.     NewValue
  186.     /> echo $var_name                        #var_name的值已经被设置为NewValue。
  187.     NewValue
  188.     /> var_name=                              #设置变量var_name,并给该变量赋空值。
  189.     /> echo ${var_name=NewValue}  #var_name被设置,且为空值,返回var_name的原有空值。
  190.    
  191.     /> echo $var_name                       #var_name的值未变化,仍未空值。
  192.    
  193.     /> var_name=OldValue                  #给var_name赋值。
  194.     /> echo ${var_name=NewValue}  #var_name非空,因此返回var_name的原有值。
  195.     OldValue
  196.     /> echo $var_name                       #var_name的值未变化,仍然OldValue。
  197.     OldValue
  198.     #${variable:+word}的示例,其C语言表示形式为:
  199.     #    if (NULL != variable)
  200.     #        return word;
  201.     #    else
  202.     #        return $variable;
  203.     /> var_name=OldValue                  #设置变量var_name,其值为非空。
  204.     /> echo ${var_name:+NewValue}   #由于var_name有值,因此返回NewValue
  205.     NewValue
  206.     /> echo $var_name                       #var_name的值仍然为远之OldValue
  207.     OldValue
  208.     /> unset var_name                        #将var_name置为空值。
  209.     /> var_name=
  210.     /> echo ${var_name:+NewValue}   #由于var_name为空,因此返回null。
  211.     /> echo $var_name                       #var_name仍然保持原有的空值。
  212.     #${variable+word}的示例,其伪码表示形式为:
  213.     #    if (variable is set)
  214.     #        return word;
  215.     #    else
  216.     #        return $variable;
  217.     /> var_name=OldValue                  #设置变量var_name,其值为非空。
  218.     /> echo ${var_name+NewValue}   #由于var_name有值,因此返回NewValue
  219.     NewValue
  220.     /> echo $var_name                       #var_name的值仍然为远之OldValue
  221.     OldValue
  222.     /> unset var_name                        #取消对变量var_name的设置。
  223.     /> echo ${var_name+NewValue}   #返回空值。
  224.     /> echo $var_name                       #var_name仍未被设置。
  225.     #${variable:?word}的示例,其C语言表示形式为:
  226.     #    if (NULL != variable) {
  227.     #        return variable;
  228.     #    } else {
  229.     #        if (NULL != word)
  230.     #            return "variable : word";
  231.     #        else
  232.     #            return "parameter null or not set";
  233.     #    }
  234.     /> var_name=OldValue                  #设置变量var_name,其值为非空。
  235.     /> echo ${var_name:?NewValue}   #由于var_name有值,因此返回变量的原有值
  236.     OldValue
  237.     /> unset var_name                        #将var_name置为空值。
  238.     /> var_name=
  239.     /> echo ${var_name:?NewValue}   #由于var_name为空,因此返回word。
  240.     -bash: var_name: NewValue
  241.     /> echo $var_name                       #var_name仍然保持原有的空值。
  242.     /> echo ${var_name:?}                #如果word为空,返回下面的输出。
  243.     -bash: var_name: parameter null or not set
  244.     #${variable:offset}示例:
  245.     /> var_name=notebook
  246.     /> echo ${var_name:2}
  247.     tebook
  248.     /> echo ${var_name:0}                #如果offset为0,则取var_name的全部值。
  249.     notebook
  250.     ${variable:offset:length}示例:
  251.     /> var_name=notebook
  252.     /> echo ${var_name:0:4}
  253.     note
  254.     /> echo ${var_name:4:4}
  255.     book
  256.     6.  变量模式匹配运算符:
  257.     Shell中还提供了一组模式匹配运算符,见下表:
  258. 运算符        替换
  259. ${variable#pattern}        如果模式匹配变量值的开头,则删除匹配的最短部分,并返回剩下的部分,变量原值不变。
  260. ${variable##pattern}        如果模式匹配变量值的开头,则删除匹配的最长部分,并返回剩下的部分,变量原值不变。
  261. ${variable%pattern}        如果模式匹配变量值的结尾,则删除匹配的最短部分,并返回剩下的部分,变量原值不变。
  262. ${variable%%pattern}        如果模式匹配变量值的结尾,则删除匹配的最长部分,并返回剩下的部分,变量原值不变。
  263. ${#variable}        返回变量中字母的数量。
  264.     #${variable#pattern}示例:
  265.     /> pathname="/home/stephen/mycode/test.h"
  266.     /> echo ${pathname#/home}        #变量pathname开始处匹配/home的最短部分被删除。
  267.     /stephen/mycode/test.h
  268.     /> echo $pathname                       #pathname的原值不变。
  269.     /home/stephen/mycode/test.h
  270.     #${variable##pattern}示例:
  271.     /> pathname="/home/stephen/mycode/test.h"
  272.     /> echo ${pathname##*/}            #变量pathname开始处匹配*/的最长部分被删除,*表示任意字符。
  273.     test.h
  274.     /> echo $pathname                       #pathname的原值不变。
  275.     /home/stephen/mycode/test.h
  276.     #${variable%pattern}示例:
  277.     /> pathname="/home/stephen/mycode/test.h"
  278.     /> echo ${pathname%/*}             #变量pathname结尾处匹配/*的最短部分被删除。
  279.     /home/stephen/mycode
  280.     /> echo $pathname                       #pathname的原值不变。
  281.     /home/stephen/mycode/test.h
  282.     #${variable%%pattern}示例:
  283.     /> pathname="/home/stephen/mycode/test.h"
  284.     /> echo ${pathname%%/*}          #变量pathname结尾处匹配/*的最长部分被删除,这里所有字符串均被删除。
  285.     /> echo $pathname                       #pathname的原值不变。
  286.     /home/stephen/mycode/test.h
  287.     #${#variable}示例:
  288.     /> name="stephen liu"
  289.     /> echo ${#name}
  290.     11
  291.     7.  Shell中的内置变量:
  292.     Shell中提供了一些以$开头的内置变量,见下表:
  293. 变量名        描述
  294. $?        表示Shell命令的返回值
  295. nbsp;       表示当前Shell的pid
  296. $-        表示当前Shell的命令行选项
  297. $!        最后一个放入后台作业的PID值
  298. $0        表示脚本的名字
  299. $1--$9        表示脚本的第一到九个参数
  300. ${10}        表示脚本的第十个参数
  301. $#        表示参数的个数
  302. $*,$@        表示所有的参数,有双引号时除外,"$*"表示赋值到一个变量,"$@"表示赋值到多个。
  303.     所有的内置变量都比较容易理解,因此这里仅给出$*和$@的区别用法:
  304.     /> set 'apple pie' pears peaches
  305.     /> for i in $*
  306.     >  do
  307.     >  echo $i
  308.     >  done
  309.     apple
  310.     pie
  311.     pears
  312.     peaches
  313.     /> set 'apple pie' pears peaches
  314.     /> for i in $@
  315.     >  do
  316.     >  echo $i
  317.     >  done
  318.     apple
  319.     pie
  320.     pears
  321.     peaches
  322.     /> set 'apple pie' pears peaches
  323.     /> for i in "$*"           #将所有参数变量视为一个
  324.     >  do
  325.     >  echo $i
  326.     >  done
  327.     apple pie pears    peaches
  328.    
  329.     /> set 'apple pie' pears peaches
  330.     /> for i in "$@"
  331.     >  do
  332.     >  echo $i
  333.     >  done
  334.     apple pie                   #这里的单引号将两个单词合成一个.
  335.     pears
  336.     peaches   
  337.    
  338.     8.  引用:
  339.     Shell中提供三种引用字符,分别是:反斜杠、单引号和双引号,它们可以使Shell中所有元字符失去其特殊功能,而还原其本意。见以下元字符列表:
  340. 元字符        描述
  341. ;        命令分隔符
  342. &        后台处理Shell命令
  343. ()        命令组,创建一个子Shell
  344. {}        命令组,但是不创建子Shell
  345. |        管道
  346. < >        输入输出重定向
  347. nbsp;       变量前缀
  348. *[]?        用于文件名扩展的Shell通配符
  349.     注:单引号和双引号唯一的区别就是,双引号内可以包含变量和命令替换,而单引号则不会解释这些,见如下示例:
  350.     /> name=Stephen
  351.     /> echo "Hi $name, I'm glad to meet you! "  #name变量被替换
  352.     Hi Stephen, I'm glad to meet you!
  353.     /> echo 'Hi $name, I am glad to meet you! ' #name变量没有被替换
  354.     Hi $name, I am glad to meet you!
  355.     /> echo "Hey $name, the time is $(date)"      #name变量和date命令均被替换
  356.     Hey Stephen, the time is Fri Nov 18 16:27:31 CST 2011
  357.     /> echo 'Hey $name, the time is $(date)'
  358.     Hey $name, the time is $(date)                      #name变量和date命令均未被替换
  359.     9.  命令替换:
  360.     同样我们需要把命令的输出结果赋值给一个变量或者需要用字符串替换变量的输出结果时,我们可以使用变量替换。在Shell中,通常使用反引号的方法进行命令替换。
  361.     /> d=`date`                           #将date命令的执行结果赋值给d变量。
  362.     /> echo $d
  363.     Fri Nov 18 16:35:28 CST 2011
  364.     /> pwd
  365.     /home/stephen
  366.     /> echo `basename \`pwd\``  #基于反引号的命令替换是可嵌入的,但是嵌入命令的反引号需要使用反斜杠转义。
  367.     stephen
  368.     除了反引号可以用于命令替换,这里我们也可以使用$(command)形式用于命令替换。
  369.     /> d=$(date)
  370.     /> echo $d
  371.     Fri Nov 18 16:42:33 CST 2011
  372.     /> dirname="$(basename $(pwd))"     #和之前的反引号一样,该方式也支持嵌套。
  373.     /> echo $dirname
  374.     stephen
  375.    10.  数学扩展:
  376.     Shell中提供了两种计算数学表达式的格式:$[ expression ]和$(( expression ))。
  377.     /> echo $[5+4-2]
  378.     7
  379.     /> echo $[5+2*3]
  380.     11
  381.     /> echo $((5+4-2))
  382.     7
  383.     /> echo $((5+2*3))
  384.     11   
  385.     事实上,我们也可以在Shell中声明数值型的变量,这需要在declare命令的后面添加-i选项,如:
  386.     /> declare -i num
  387.     /> num=5+5      #注意在赋值的过程中,所有的符号之间均没有空格,如果需要空格,需要在表达式的外面加双引号
  388.     /> echo $num    #如果没有声明declare -i num,该命令将返回5+5
  389.     10
  390.     /> num="5 * 5"
  391.     /> echo $num
  392.     25
  393.     /> declare strnum
  394.     /> strnum=5+5
  395.     /> echo $strnum #由于并未将strnum声明为数值型,因此该输出将按字符串方式处理。
  396.     5+5
  397.     Shell还允许我们以不同进制的方式显示数值型变量的输出结果,其格式为:进制+#+变量。
  398.     /> declare -i x=017 #017其格式为八进制格式
  399.     /> echo $x           #缺省是十进制
  400.     15
  401.     /> x=2#101         #二进制
  402.     /> echo $x
  403.     5
  404.     /> x=8#17           #八进制
  405.     /> echo $x
  406.     15
  407.     /> x=16#b           #十六进制
  408.     /> echo $x
  409.     11
  410.     在Shell中还提供了一个内置命令let,专门用于计算数学运算的,见如下示例:
  411.     /> let i=5
  412.     /> let i=i+1
  413.     /> echo $i
  414.     6
  415.     /> let "i = i + 2"
  416.     /> echo $i
  417.     8
  418.     /> let "i+=1"
  419.     /> echo $i
  420.     9   
  421.     11.  数组:
  422.     Shell中提供了创建一维数组的能力,你可以把一串数字、名字或者文件放在一个变量中。使用declare的-a选项即可创建它们,或者在变量后面增加下标操作符直接创建。和很多其它开发语言一样,Shell中的数组也是0开始的,然而不同的是Shell中数组的下标是可以不连续的。获取数组中某个元素的语法格式为: ${arrayname[index]}。见如下示例:
  423.     /> declare -a friends                   #声明一个数组变量
  424.     /> friends=(sheryl peter louise)   #给数组变量赋值
  425.     /> echo ${friends[0]}                #通过数组下标的方式访问数组的元素
  426.     sheryl
  427.     /> echo ${friends[1]}
  428.     peter
  429.     /> echo ${friends[2]}
  430.     louise
  431.     /> echo ${friends[*]}                #下标中星号表示所有元素。
  432.     shery1 peter louise
  433.     # ${#array[*]}表示数组中元素的数量,而${#friend[0]}则表示第一个元素的长度。
  434.     /> echo ${#friends[*]}   
  435.     3
  436.     /> unset friends                         #unset array清空整个数组,unset array[index]仅清空指定下标的元素。
  437.     /> x[3]=100
  438.     /> echo ${x[*]}
  439.     100
  440.     /> echo ${x[0]}                        #0下标的元素并没有被赋值过,因为输出为空。
  441.     /> echo ${x[3]}
  442.     100
  443.     /> states=(ME [3]=CA [2]=CT)   #ME的下标为0。
  444.     /> echo ${states[0]}
  445.     ME
  446.     /> echo ${states[1]}                 #数组下标为1的位置没有被赋值过,因此没有输出。
  447.     /> echo ${states[2]}
  448.     CT
  449.     /> echo ${states[3]}
  450.     CA
  451.     12.  函数:
  452.     和C语言一样,Shell中也可以创建自己的自定义函数。其格式如下:
  453.     function_name () { commands; commands; }
  454.     function function_name { commands; commands; }
  455.     function function_name () { commands; commands; }
  456.     函数的参数在函数内是以$[0-9]、${10}...,这种局部变量的方式来访问的。见下面的示例:
  457.     #函数的左花括号和命令之间必须有至少一个空格。每个命令的后面都要有一个分号,即便是最后一个命令
  458.     /> function greet { echo "Hello $LOGNAME, today is $(date)"; }
  459.     #此时函数已经驻留在当前的bash shell中,因此使用函数效率更高。
  460.     /> greet   
  461.     Hello root, today is Fri Nov 18 20:45:10 CST 2011
  462.     /> greet() { echo "Hello $LOGNAME, today is $(date)"; }
  463.     /> greet
  464.     Hello root, today is Fri Nov 18 20:46:40 CST 2011
  465.     #welcome函数内部使用了函数参数。
  466.     /> function welcome { echo "Hi $1 and $2"; }
  467.     /> welcome stephen jane   
  468.     Hi stephen and jane
  469.     #declare -F选项将列出当前Shell中驻留的函数
  470.     /> declare -F
  471.     declare -f greet
  472.     declare -f welcome
  473.     #清空指定的函数,使其不在Shell中驻留。
  474.     /> unset -f welcome
  475.     13.  重定向:
  476.     下面的列表为Shell中支持的重新定向操作符。
  477. 操作符        功能
  478. <        重新定向输入
  479. >        重新定向输出
  480. >>        追加输出
  481. 2>        重新定向错误
  482. &>        重新定向错误和输出
  483. >&        重新定向错误和输出
  484. 2>&1        重新定向错误到标准输出
  485. 1>&2        重新定向标准输出到错误
  486. >|        重新定向输出的时候覆盖noclobber选项
  487.     #find命令将搜索结果输出到foundit文件,把错误信息输出到/dev/null
  488.     /> find . -name "*.c" -print > foundit 2> /dev/null
  489.     #将find命令的搜索结果和错误信息均输出到foundit文件中。
  490.     /> find . -name "*.c" -print >& foundit
  491.     #同上。
  492.     /> find . -name "*.c" -print > foundit 2>&1
  493.     #echo命令先将错误输出到errfile,再把信息发送到标准错误,该信息标准错误与标准输出合并在一起(errfile中)。
  494.     /> echo "File needs an argument" 2> errfile 1>&2
  495.     /> cat errfile
  496.     File needs an argument
复制代码
来自:http://www.cnblogs.com/stephen-l ... /12/15/2263916.html

目录:
Linux Shell常用技巧(一)
http://www.acejoy.com/thread-4312-1-1.html
一. 特殊文件: /dev/null和/dev/tty
二. 简单的命令跟踪
三. 正则表达式基本语法描述
四. 使用cut命令选定字段
五. 计算行数、字数以及字符数
六. 提取开头或结尾数行

Linux Shell常用技巧(二)
http://www.acejoy.com/thread-4313-1-1.html
七. grep家族

Linux Shell常用技巧(三)
http://www.acejoy.com/thread-4314-1-1.html
八. 流编辑器sed

Linux Shell常用技巧(四)
http://www.acejoy.com/thread-4315-1-1.html
九. awk实用功能
十. awk表达式功能

Linux Shell常用技巧(五)
http://www.acejoy.com/thread-4316-1-1.html
十一.awk编程

Linux Shell常用技巧(六)
http://www.acejoy.com/thread-4317-1-1.html
十二.行的排序命令sort
十三.删除重复行的命令uniq
十四.文件压缩解压命令tar
十五.大文件拆分命令split

Linux Shell常用技巧(七)
http://www.acejoy.com/thread-4318-1-1.html
十六.文件查找命令find
十七.xargs命令

Linux Shell常用技巧(八)
http://www.acejoy.com/thread-4319-1-1.html
十八.和系统运行状况相关的Shell命令

Linux Shell常用技巧(九)
http://www.acejoy.com/thread-4320-1-1.html
十九.和系统运行进程相关的Shell命令

Linux Shell常用技巧(十)
http://www.acejoy.com/thread-4321-1-1.html
二十.通过管道组合Shell命令获取系统运行数据
二十一.通过管道组合Shell命令进行系统管理

Linux Shell常用技巧(十一)
http://www.acejoy.com/thread-4322-1-1.html
二十二.交互式使用Bash Shell

Linux Shell常用技巧(十二)
http://www.acejoy.com/thread-4323-1-1.html
二十三.Bash Shell编程

 楼主| 发表于 2012-10-19 10:12:20 | 显示全部楼层
刷新,冲掉垃圾广告标题。
发表于 2013-3-15 09:45:40 | 显示全部楼层
刷新,冲掉垃圾广告标题。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-22 12:03 , Processed in 0.018576 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表