今晚在準(zhǔn)備京東提前批面試的時(shí)候,發(fā)現(xiàn)京東崗位需求有一點(diǎn)很顯眼“了解linux及基本的操作命令”linux常用命令,面試漸漸臨近,頓時(shí)感覺(jué)有點(diǎn)慌;自己想了想能夠問(wèn)那些指令,頭腦一片空白;到午夜來(lái)整理一下Linux命令在平時(shí)寫編譯腳本比較容易用的linux常用命令,也看了一些實(shí)習(xí)公司同事寫的shell腳本經(jīng)常使用的,再翻翻以往大佬面試的面經(jīng),總結(jié)對(duì)比一下。
1、shell中變量$#,$$,$0....$n,$?
(1)$0 :Shell本身的文件名 ,如:用$0可以獲得runMake.sh文件;
(2)$1~$n:Shell文件的各參數(shù)值(跟在.sh文件后的)。$1是第1參數(shù)、$2是第2參數(shù)…;
(3)$# :添加到Shell的參數(shù)個(gè)數(shù) ,參數(shù)一般是以空格隔開;
(4)$? :最后運(yùn)行的命令的結(jié)束代碼(返回值) ;
(5)$@ :所有參數(shù)列表,"$@"用引號(hào)括起來(lái)的情況,以"$1" "$2" … "$n" 的形式輸出所有參數(shù);
(6)$$ :Shell本身的PID(ProcessID);
(7)$! :Shell最后運(yùn)行的后臺(tái)Process的PID ;
備注:
cd "$(dirname "$0")" //找到.sh文件所在的目錄名
2、重定向輸出
在shell腳本中0表示標(biāo)準(zhǔn)輸入,1表示標(biāo)準(zhǔn)輸出,2表示標(biāo)準(zhǔn)錯(cuò)誤輸出,>和1>都是標(biāo)準(zhǔn)輸出重定向
2>&1表示把標(biāo)準(zhǔn)錯(cuò)誤輸出到標(biāo)準(zhǔn)輸出,&>file表示把標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出都重定向到file文件中
rm -rf $(filename) &> /dev/null //將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出都丟棄,/dev/null一個(gè)空設(shè)備文件
grep "\<shell\>" file.txt > log1 //log1里只有標(biāo)準(zhǔn)輸出
grep "\<shell\>" file.txt > log2 1>&2 //log2里面什么都沒(méi)有
grep "\<shell\>" file.txt > log2 2>&1 //log3里面既有標(biāo)準(zhǔn)輸出又有標(biāo)準(zhǔn)錯(cuò)誤輸出
注:標(biāo)準(zhǔn)輸出相當(dāng)于stdout,標(biāo)準(zhǔn)錯(cuò)誤輸出為stderr,標(biāo)準(zhǔn)錯(cuò)誤輸出可以輸出到屏幕中,可能不會(huì)輸出到指定的log1..
3、字符串截取(主要用于文件管理比較多)
(1)# */:刪除第一個(gè)/及其左邊的字符串
(2)## */:刪除最后一個(gè)/及其左邊的字符串
(3)%%.*:刪除最后一個(gè).及其右邊的字符串
(4)%.*:刪除第一個(gè).及其右邊的字符串
ep:dirname=usr1/Gtest-share/lyf/factory.cpp
ehco ${dirname ##*/} --->結(jié)果是:factory.cpp
echo dirname($path['。 dirname=`echo $dir | sed -e s/target-//g -e s/build-//g` 。echo dirname($path)。
echo ${dirname %.*} --->結(jié)果是:cpp
(5)${dirname:0:4} 從左邊第幾個(gè)字符開始,及字符的個(gè)數(shù)
其中的0表示左邊第一個(gè)字符開始,4表示字符的總個(gè)數(shù)。--->結(jié)果是:usr1
(6)${dirname:5} 從左邊第幾個(gè)字符開始,一直到結(jié)束。
其中的7表示左邊第8個(gè)字符開始,一直到結(jié)束。--->結(jié)果是:Gtest-share/lyf/factory.cpp