Y分鐘學Bash

Bash 是一個爲 GNU 計劃編寫的 Unix shell,是 Linux 和 Mac OS X 下的默認 shell。
如下大多數例子能夠做爲腳本的一部分運行,也可直接在 shell 下交互執行。html

更多信息python

#!/bin/sh

腳本的第一行叫 shebang,用來告知系統如何執行該腳本:
參見: http://en.wikipedia.org/wiki/Shebang_(Unix)
如你所見,註釋以 # 開頭,shebang 也是註釋。shell

顯示 「Hello world!」編程

echo Hello, world!

每一句指令以換行或分號隔開:數組

echo 'This is the first line'; echo 'This is the second line'

聲明一個變量:bash

VARIABLE="Some string"

下面是錯誤的作法:編程語言

VARIABLE = "Some string"

Bash 會把 VARIABLE 當作一個指令,因爲找不到該指令,所以這裏會報錯。函數

使用變量:學習

echo $VARIABLE
echo "$VARIABLE"
echo '$VARIABLE'

當你賦值 (assign) 、導出 (export),或者以其餘方式使用變量時,變量名前不加 $。
若是要使用變量的值, 則要加 $。
注意: ' (單引號) 不會展開變量(即會屏蔽掉變量)。翻譯

在變量內部進行字符串代換

echo ${VARIABLE/Some/A}

會把 VARIABLE 中首次出現的 "some" 替換成 「A」。

內置變量:
下面的內置變量頗有用

echo "Last program return value: $?"
echo "Script's PID: $$"
echo "Number of arguments: $#"
echo "Scripts arguments: $@"
echo "Scripts arguments separeted in different variables: $1 $2..."

讀取輸入:

echo "What's your name?"
read NAME # 這裏不須要聲明新變量
echo Hello, $NAME!

一般的 if 結構看起來像這樣:
man test 可查看更多的信息

if [ $NAME -ne $USER ]
then
    echo "Your name is you username"
else
    echo "Your name isn't you username"
fi

根據上一個指令執行結果決定是否執行下一個指令

echo "Always executed" || echo "Only executed if first command fail"
echo "Always executed" && echo "Only executed if first command does NOT fail"

表達式的格式以下:

echo $(( 10 + 5 ))

與其餘編程語言不一樣的是,bash 運行時依賴上下文。好比,使用 ls 時,列出當前目錄。

ls

指令能夠帶有選項:

ls -l # 列出文件和目錄的詳細信息

前一個指令的輸出能夠看成後一個指令的輸入。grep 用來匹配字符串。
用下面的指令列出當前目錄下全部的 txt 文件:

ls -l | grep "\.txt"

重定向能夠到輸出,輸入和錯誤輸出。

python2 hello.py < "input.in"
python2 hello.py > "output.out"
python2 hello.py 2> "error.err"

> 會覆蓋已存在的文件, >> 會以累加的方式輸出文件中。

一個指令可用 $( ) 嵌套在另外一個指令內部:
如下的指令會打印當前目錄下的目錄和文件總數

echo "There are $(ls | wc -l) items here."

Bash 的 case 語句與 Java 和 C++ 中的 switch 語句相似:

case "$VARIABLE" in
    # 列出須要匹配的字符串
    0) echo "There is a zero.";;
    1) echo "There is a one.";;
    *) echo "It is not null.";;
esac

循環遍歷給定的參數序列:
變量$VARIABLE 的值會被打印 3 次。
注意 和 $( ) 等價。seq 返回長度爲 3 的數組。

for VARIABLE in `seq 3`
do
    echo "$VARIABLE"
done

你也可使用函數
定義函數:

function foo ()
{
    echo "Arguments work just like script arguments: $@"
    echo "And: $1 $2..."
    echo "This is a function"
    return 0
}

更簡單的方法

bar ()
{
    echo "Another way to declare functions!"
    return 0
}

調用函數

foo "My name is" $NAME

有不少有用的指令須要學習:

tail -n 10 file.txt

打印 file.txt 的最後 10 行

head -n 10 file.txt

打印 file.txt 的前 10 行

sort file.txt

將 file.txt 按行排序

uniq -d file.txt

報告或忽略重複的行,用選項 -d 打印重複的行

cut -d ',' -f 1 file.txt

打印每行中 ',' 以前內容


原文 Learn X in Y minutes, where X = Bash
by Max Yankov
翻譯 徐春陽
許可 CC-BY-SA

相關文章
相關標籤/搜索