標籤:bash shell linux
shell指令碼運行方式
$sh script.sh$sh /home/path/script.sh$chmod a+x script.sh ; $./script.sh
echo的三種使用方式echo hello world 不能包含一些特殊關鍵字,如分號;
echo "hello word" 不能包含一些特殊字元,比如!
echo ‘hello word" 包含‘$var‘變數不能被求值
echo預設會將一個分行符號追加到輸出後,如果想禁止,可以使用-n這個選項
如果想要使某些逸出字元生效,則可以使用-e這個選項,如
echo "\ta\tb" 會輸出 \ta\tb
echo -e "\ta\tb" 則會輸出 a b
顯示某些進程的環境變數
[[email protected] ~]$ pgrep bash3182[[email protected] ~]$ cat /proc/3182/environ USER=hadoopLOGNAME=hadoopHOME=/home/hadoopPATH=/usr/local/bin:/bin:/usr/binMAIL=/var/mail/hadoopSHELL=/bin/bashSSH_CLIENT=192.168.1.1 5649 22SSH_CONNECTION=192.168.1.1 5649 192.168.1.10 22SSH_TTY=/dev/pts/0TERM=vt100SELINUX_ROLE_REQUESTED=SELINUX_LEVEL_REQUESTED=SELINUX_USE_CURRENT_RANGE=
算術運算
使用 let、(())、[]執行基本的算術運算。
如let a = b+c; let a++;let a--;
也可以使用[], a=$[b+c]; a=$[$b+5]
也可以使用(()),不過都需要在變數前加上$
刪除變數:unset
tee
tee命令:以stdin作為輸入,將其輸入到某個檔案中,並原樣輸出
顯示變數
set 顯示當前shell的變數,包括目前使用者環境變數和自己定義的變數
env 顯示目前使用者環境變數
export 顯示當前置出成使用者變數的shell變數
關聯陣列即 Map
[[email protected] ~]$ declare -A map_array[[email protected] ~]$ map_array[index1]=val1[[email protected] ~]$ map_array[index2]=val2[[email protected] ~]$ echo ${map_array[*]}val1 val2[[email protected] ~]$ echo ${!map_array[*]}index1 index2
cat
作用:讀取、顯示、拼接檔案內容。
將AB兩個檔案內容一塊輸出 [[email protected] ~]$ cat A B
將輸入文本與A一塊顯示 [[email protected] ~]$ echo "Hello" | cat - A
壓縮空白行 cat -s A
將定位字元顯示為^| cat -T A
顯示文本行號 cat -n A
find
作用:尋找路徑及子路徑下所有的檔案和檔案夾
尋找script目錄下所有的檔案
[[email protected] ~]$ find script/script/script/timing.logscript/output.session
根據檔案名稱或Regex匹配搜尋
[[email protected] ~]$ find script/ -name "t*" #必須用引號括起來[[email protected] ~]$ find script/ -iname "t*" #忽略檔案名稱的大小寫
可以用OR串連多個條件
[[email protected] ~]$ find script/ \( -name "t*" -o -name "out*" \)#注意空格script/timing.logscript/output.session
可以使用參數指定尋找深度
-maxdepth 1 #指定尋找的最大深度
-mindepth 1 #指定尋找的最小深度,即只列出1層以上的檔案清單
根據檔案類型搜尋
-type d #只列出檔案夾 -type f #只列出普通檔案
此外還可以根據時間和檔案大小,還可以使用-delete刪除找到的檔案。
-exec 可以對查出的每一個檔案分別進行處理,如將檔案所有者root改為hadoop:
[[email protected] temp]$ sudo find . -type f -user root -exec chown hadoop {} \;
xargs
作用:將標準輸入轉換成命令列參數或者將單行或多行文本轉換成命令列參數
[[email protected] ~]$ cat A | xargs #將A檔案多行資料轉換成單行輸入,即將分行符號替換為空白格[[email protected] ~]$ cat A | xargs -n 3#將A檔案多行資料重新分割並按3個進行分組[[email protected] ~]$ cat A | xargs -d i #指定分隔字元為 i
小提示:xargs 預設是以空白字元 (空格, TAB, 分行符號) 來分割記錄的, 因此檔案名稱 file 1.log 被解釋成了兩個記錄 file 和 1.log, 不幸的是 rm 找不到這兩個檔案.為瞭解決此類問題, 讓 find命令在列印出一個檔案名稱之後接著輸出一個 NULL 字元 (‘‘) 而不是分行符號, 然後再告訴 xargs 也用 NULL 字元來作為記錄的分隔字元. 這就是 find 的 -print0 和 xargs 的 -0 的來曆吧.
sort和uniq
[[email protected] ~]$sort A #對A檔案進行升序排序[[email protected] ~]$sort -r A #對A檔案進行逆序排序[[email protected] ~]$sort -n A #對A檔案按數字進行排序[[email protected] ~]$sort -k 2 A #根據第二列進行排序
uniq總是和sort一起使用,可以消除重複的行
Shell指令碼基本命令