Bash
當我們登陸到終端機(tty)之后,Linux會依據/etc/passwd中的設置給我指定一個shell(默認是bash,即B-shell),然后就可以使用這個shell做相關的操作了,下面記錄bash的詳細內容。
shell是面向命令處理的語言,提供的流程控制結構通過對一些內部命令的解釋實現
一、一個bash的例子:listdir
#!/bin/sh if [ $# = 0 ] then dir=. else dir=$1 fi find $dir -type d –print
這里就是列出目錄,$#參數個數,$1第一個參數,具體后面詳見后面
二、輸入重定向
<filename 從文件filename中獲取stdin 例如: sort < telno.txt
三、sh變量
變量存儲的是字符串,執行過程中可以被修改,第一個字符是字母,后面是字母數字下劃線都可以
賦值和引用
arg=123321nsad
echo $arg
echo ${arg} 加上了{}可以顯式的決定變量的邊界
注意賦值的時候等號兩邊不能加空格,引用的時候用$引用,bash自動完成變量的替換
變量沒定義,就是空串
只讀變量
arg=123
readonly arg這樣就不能對于只讀變量的值進行修改了
刪除變量
unset argunset不能刪除只讀變量
echo命令
echo arg1 arg2 arg3 ...
打印各命令行參數,每兩個間用一空格分開,最后打印換行符
-e 開啟轉義,常見的轉義有:c 打印完畢,不換行 退格 換行 回車 水平制表 \ 反斜線 nn 八進制描述的字符ASCII碼還有printf命令,與c語言的printf很相似
read
從標準輸入讀入一行內容賦值給變量
read xxx 這樣就能把輸入的值賦給xxx
字符串
#字符串的拼接
name=liangzhuang
string="thu name is ${name}!"
#獲取字符串長度
string="the string"
echo ${#string}
#提取子字符串
echo ${string:1:4} #輸出the
#查找子字符串的位置
echo `expr index "$string" t` # 輸出t的匹配的位置
數組array_name=(value0 value1 value2 value3)array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
#獲得數組元素
valuen=${array_name[n]}
#獲得數組的所有元素
echo ${array_name[@]}
或者
echo ${array_name[*]}
#數組長度
${#array_name[@]}
或者
${#array_name[*]}
# 取得數組單個元素的長度,就是第n個元素的具體長度
lengthn=${#array_name[n]}
參數傳遞
$0 為執行的文件名
$i 第i個參數,i超過9 應該為${i}
$# 參數個數
$$ 當前腳本運行的進程號
$- 顯示Shell使用的當前選項,與set命令功能相同。
$? 上一條命令是否執行成功 ,0表示成功
$* 與 $@ 都是表示全部參數,前者把參數作為一個字符串,后者保留n個參數的n個字符串
算數運算符
一般是調用 expr 進行算數運算的 echo `expr $a + $b` echo `expr $a * $b` echo `expr $a / $b` echo `expr $a % $b` #這個每個符號兩邊都要加空格,除法就是int型的運算規則,截尾 [ $a == $b ] 相等判斷 [ $a != $b ] 相等判斷 a=$b 賦值
關系運算符
只支持數字,不支持字符串
[ $a -eq $b ]
[ $a -ne $b ]
[ $a -gt $b ]
[ $a -lt $b ]
[ $a -ge $b ]
[ $a -le $b ]
布爾運算符
[ ! false ] 返回 true。
[ $a -lt 20 -o $b -gt 100 ]
[ $a -lt 20 -a $b -gt 100 ]
字符串運算符
[ $a = $b ] [ $a != $b ] [ -z $a ] 長度為0返回true [ -n $a ] 長度不為0返回true [ $a ] 不為空返回true
文件測試運算符
-rwx 權限 -s 文件是否為空,不為空為true -e 檢測文件(包括目錄)是否存在,如果是,則返回 true。 -bcdf 文件類型 使用例子 [-r $file] 判斷文件是否可讀
以上的[] 實際上是與test命令等價的
輸入輸出重定向
輸出重定向會覆蓋文件內容,如果不希望文件內容被覆蓋,可以使用 >> 追加到文件末尾 ech “追加文字" >> file #輸入重定向 command1 < file1 #把file1作為命令的輸入 一般情況下,每個 Unix/Linux 命令運行時都會打開三個文件: 標準輸入文件(stdin):stdin的文件描述符為0,Unix程序默認從stdin讀取數據。 標準輸出文件(stdout):stdout 的文件描述符為1,Unix程序默認向stdout輸出數據。 標準錯誤文件(stderr):stderr的文件描述符為2,Unix程序會向stderr流中寫入錯誤信息。 默認情況下,command > file 將 stdout 重定向到 file,command < file 將stdin 重定向到 file。
command 2 >> file 把錯誤輸出 追加到file
command > file 2>&1 先把命令輸出重定向到file,在把錯誤重定向到stdout,此時stdout就是 file
command < file1 >file2 command 命令將 stdin 重定向到 file1,將 stdout 重定向到 file2
command > /dev/null 2>&1 禁止該命令輸出任何內容
n>file 將文件描述符為 n 的文件重定向到 file。
n>>file 將文件描述符為 n 的文件以追加的方式重定向到 file。
流程控制!!
總結
- 上一篇: jvm 内存溢出问题排查方法
- 下一篇: Ambiguous expansion