Shell 编程基础之注意技巧

  • 退出状态
    bash中的内建命令虽然不创建新的进程,但也会有Exit Status,通常也用0表示成功非零表示失败,可以用特殊变量$?读出
  • 命令代换:`或$()
    user@ae01:~$ echo `date`
    Sat Oct 25 19:17:58 CST 2014
    user@ae01:~$
    
    user@ae01:~$ echo $(date)
    Sat Oct 25 19:18:16 CST 2014
    user@ae01:~$
  • 算术代换:$(())
    user@ae01:~$ echo $((1+1))
    2
    user@ae01:~$ i=1
    user@ae01:~$ echo $(($i+1))
    2
    
    user@ae01:~$ echo $((i+1))
    2
  • 单引号
    Shell脚本中的单引号和双引号一样都是字符串的界定符,而不是字符的界定符。单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外,但是字符串中不能出现单引号。如果引号没有配对就输入回车,Shell会给出续行提示符,要求用户把引号配上对。例如:
    user@ae01:~$ echo 'hello word
    > '
    hello word
    
    user@ae01:~$
    user@ae01:~$ echo 'hello \
    > word'
    hello \
    word
    user@ae01:~$
  • 双引号
    双引号用于保持引号内所有字符的字面值(回车也不例外),但以下情况除外:
    • $加变量名可以取变量的值
    • ``仍表示命令替换
    • \$ 表示$的字面值
    • \` 表示`的字面值
    • \" 表示"的字面值
    • \\ 表示\的字面值
  • user@ae01:~$ echo $HOME
    /home/user
    user@ae01:~$ echo "`date`"
    Sat Oct 25 19:31:46 CST 2014
    user@ae01:~$ echo "I'd say: \"Go for it\""
    I'd say: "Go for it"
    user@ae01:~$ echo "\"
    > "
    "
    
    user@ae01:~$ echo "\\"
    \
    user@ae01:~$
  • bash 参数
    • $0 代表脚本在执行时的自身文件名;像上面执行时用的是相对路径,即显示执行时的$0为"./Parameter";若执行时用绝对路径“/home/kashu/Parameter”,则$0就会显示为“/home/kashu/Parameter”
    • $# 代表所有参数的总数量
    • $@ 代表 "$1","$2", "$3", "$4" 等等,即代表每个独立的变量参数,$1 代表第一个变量参数, $2 代表第二个变量参数
  • echo "$# parameters";
    
    echo -e \\nUsing '$*';
            for p in $*;
            do
                    echo "[$p]";
            done;
            
    echo -e \\nUsing '"$*"';
            for p in "$*";
            do
                    echo "[$p]";
            done;
    
    echo -e \\nUsing '$@';
            for p in $@;
            do
                    echo "[$p]";
            done;
    
    echo -e \\nUsing '"$@"';
            for p in "$@";
            do
                    echo "[$p]";
            done
    user@ae01:~$ ./test.sh 1 "2 3"
    2 parameters
    
    Using $*
    [1]
    [2]
    [3]
    
    Using "$*"
    [1 2 3]
    
    Using $@
    [1]
    [2]
    [3]
    
    Using "$@"
    [1]
    [2 3]
posted @ 2014-10-27 15:48  TannerBG  阅读(190)  评论(0编辑  收藏  举报