bash 中的双引号和单引号

在 bash 中,

单引号 可以保证引用区域内的文字不被转换,起到保护作用,一般可以用在显示 code 之类;
双引号 可以包含文字或者函数段。其中,反引号中的函数,$ 开头的变量和 \ 开头反转换的字符外,其他都是直接输出。

之所以用双引号,是因为在bash中的变量替换发生在双引号内,如果不用引号,bash会把它们解释为命令。

【笔记】Bash Shell 下算术运算的方法

以下摘自 www.tnc.edu.tw,by 臥龍小三。原文

 

Bash shell 的算術運算有四種方式。

  1. 第一種:使用 expr 這個外部程式

    加法 r=expr 4 + 5

    echo $r

    注意! '4' '+' '5' 這三者之間要有空白

    注意! 以下是錯誤的寫法:

    r=expr 4 * 5

    原因:* 對 bash 而言有特殊意義(萬用字元),所以要改用以下寫法:

    乘法 r=expr 4 \* 5

    也就是說用 \ 取消 * 的特殊意義。

  2. 第二種:使用 $(( ))

    上述計算,可用以下方式來做:

    r=$(( 4 + 5 ))

    echo $r

  3. 第三種:使用 $[ ]

    上述計算,可用以下方式來做:

    r=$[ 4 + 5 ]

    echo $r

  4. 乘法

    r=expr 4 \* 5

    r=$(( 4 * 5 ))

    r=$[ 4 * 5 ]

    echo $r

  5. 除法

    r=expr 40 / 5

    r=$(( 40 / 5 ))

    r=$[ 40 / 5 ]

    echo $r

  6. 減法

    r=expr 40 - 5

    r=$(( 40 – 5 ))

    r=$[ 40 – 5 ]

    echo $r

  7. 求餘數

    r=$[ 100 % 43 ]

    echo $r

  8. 乘冪 (如 2 的 3 次方)

    r=$(( 2 ** 3 ))

    r=$[ 2 ** 3 ]

    echo $r

    註:expr 沒有乘冪

Bash 的第四種算術運算方法,它使用 let 這個命令,如下所示:

雖然 Bash shell 有數種算術運算方法,但並不是每一種方法都可以跨平台,若您的 script 檔要在其它平台上使用,建議最好用 expr 這種方式,或許可攜性會好一點。

另外,我們在 script 中經常需要把某一變數做加一運算,以下四法皆可:

m=$[ m + 1]

m=expr $m + 1

m=$(($m + 1))

let m=m+1

Linux 下如何分别打包(压缩)目录下所有文件夹,xargs,awk

这个问题可以通过一行命令完成(当然是通过管道 “|” 所包含多条命令啦)。首先需要拆分这个问题。

  • 获得所有目录列表,通过 grep 命令抓取以 d 标记开头的行,即为目录。

  • 这样只是 ls 了所有目录,接下来需要获得目录下所有文件夹名称,不需要多余信息。使用 awk 选取名称列。

  • 接下来最后一步是打包这些目录。使用 xargs 来实现。

 

其实 Linux 下很多问题都可以这样一步一步分解成不同部分,用不同命令组合来完成,这就是 bash 脚本的精髓。

 

参考:

awk:http://linux.die.net/man/1/awkhttp://www.gnu.org/software/gawk/manual/gawk.html

xargs:http://unixhelp.ed.ac.uk/CGI/man-cgi?xargshttp://en.wikipedia.org/wiki/Xargs

cut:http://www.manpagez.com/man/1/cut/

grep:http://unixhelp.ed.ac.uk/CGI/man-cgi?grep