Shell學(xué)習(xí)(一)


title: shell學(xué)習(xí)(一)
time: 2018.3.1 星期五 16:11


變量

  1. 變量與變量的內(nèi)容以 '=' 來連接贸街。
  2. 等號(hào)兩邊都不能直接接空格憋飞。
  3. 變量命名要求 秘通,不能以數(shù)字開頭,由數(shù)字和英文字母組成。
  4. 有空格符可以以單引號(hào)或者雙引號(hào)將變量內(nèi)容結(jié)合起來太颤。
    • 雙引號(hào)內(nèi)的特殊字符如 $ 可以保持原來的1意思。
    • 單引號(hào)內(nèi)的特殊字符則僅為一般字符(純文本)。
  5. 可用轉(zhuǎn)義字符 ’\‘ 將特殊符號(hào)轉(zhuǎn)義為1一般字符.
  6. 在一串命令中需要通過其他命令提供的信息墓拜。可使用反單引號(hào)或者$ ;反單引號(hào)為鍵盤上方的數(shù)字鍵盤1左邊的按鍵请契。
  7. 若變量為了增加變量的內(nèi)容咳榜。可使用 ‘$變量名稱’ 或者 ’${變量名稱}‘累加內(nèi)容爽锥,以:作為后綴涌韩。
  8. export 使變量成為環(huán)境變量。
  9. unset 取消設(shè)置環(huán)境變量A

查看自己的系統(tǒng)支持哪些shell

    /etc/shell

傳遞參數(shù)

  • $0 執(zhí)行的文件名字
  • 向腳本傳遞參數(shù)氯夷,腳本內(nèi)獲取參數(shù)的格式為:$n臣樱。n 代表一個(gè)數(shù)字,1 為執(zhí)行腳本的第一個(gè)參數(shù),2 為執(zhí)行腳本的第二個(gè)參數(shù)雇毫,以此類推……
參數(shù)處理 說明
$# 傳遞到腳本的參數(shù)個(gè)數(shù)
$* 以一個(gè)單字符顯示所有向腳本傳遞的參數(shù)
$$ 腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào)
$! 后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的ID號(hào)
$@ 與$*相同奢啥,但是使用時(shí)加引號(hào),并在引號(hào)中返回每個(gè)參數(shù)嘴拢。
$- 顯示當(dāng)前shell使用的當(dāng)前選項(xiàng)
$? 顯示最后命令的退出狀態(tài) 0 表示沒有任何錯(cuò)誤桩盲。其他任何值表明有錯(cuò)誤。

* 與@ 不同:前者 “1席吴,2赌结,3” 后者 “1”,“2”孝冒,“3”

數(shù)組

  • 定義
array_name={value0,value1...}
  • 引用
${array_name[index]}
  • 數(shù)組長度
${#array_name[*]}
${#array_name[@]}

基本運(yùn)算符

算術(shù)運(yùn)算符

  • expr 使用反引號(hào) 不是單引號(hào)
 val=`expr 2 + 2`   #兩個(gè)數(shù)相加 + 號(hào)左右要有空格
  • 算術(shù)運(yùn)算符
    • , -, * , / ,%, = , ==, !==
      乘號(hào) * 需要 反斜號(hào) \ 轉(zhuǎn)義
  • == 與 !=
$a == $b

$a != $b

關(guān)系運(yùn)算符

  • 關(guān)系運(yùn)算符只支持?jǐn)?shù)字柬姚,不支持字符串,除非字符串的值是數(shù)字庄涡。
運(yùn)算符 說明
-eq 兩個(gè)數(shù)是否相等
-ne 兩個(gè)數(shù)是否不相等
-gt 檢測左邊的數(shù)是否大于右邊的
- lt 檢測左邊的數(shù)是否小于右邊的
-ge 檢測左邊的數(shù)是否大于等于右邊的
-le 檢測左邊的數(shù)是否小于等于右邊的
 $a -eq $b

布爾運(yùn)算符

運(yùn)算符 說明
! 非運(yùn)算
-o 或運(yùn)算
-a 與運(yùn)算

邏輯運(yùn)算符

運(yùn)算符 說明
&& 邏輯的AND
|| 邏輯的OR

字符串運(yùn)算符

運(yùn)算符 說明
= 兩個(gè)字符串是否相等
!= 兩個(gè)字符串是否不相等
-z 檢測字符串是否長度為0 為0 返回 true
-n 檢測字符串是否長度為0 不為0 返回 true
$ 檢測字符串是否為空 不為空返回true

文件測試運(yùn)算符

操作符 說明
-b file 檢測文件是否是塊設(shè)備文件 是返回true
-c file 檢測文件是否為字符設(shè)備文件 是返回true
-d file 檢測文件是否是目錄 是返回true
-f file 檢測文件是否為普通文件(不是目錄 也不是設(shè)備文件)是 返回 true
-g file 檢測文件是否設(shè)置了 SGID位 是返回true
-k file 檢測文件是否設(shè)置了粘著位(Sticky Bit)量承,如果是,則返回 true穴店。
-p file 檢測文件是否是有名管道撕捍,如果是,則返回 true泣洞。
-u file 檢測文件是否設(shè)置了 SUID 位忧风,如果是,則返回 true球凰。
-r file 文件是否可讀
-w file 文件是否可寫
-x file 文件是否可執(zhí)行
-s file 文件是否為空
-e file 檢測文件(目錄)是否存在 是返回true

echo

#顯示換行
echo -e "hello \n"

#顯示不換行
echo -e "hello \c"  #-e 開啟轉(zhuǎn)義 \c 不換行

#顯示結(jié)果定向至文件
echo "hello" > file

#原樣輸出字符串 不進(jìn)行轉(zhuǎn)義或取變量 用單引號(hào)
echo ' string'

#顯示命令執(zhí)行結(jié)果 用反引號(hào)
echo `date`

printf

  • 格式
printf format-string [arguments.....]
  • 類比c語言printf 多一個(gè) - 指定對齊方式
printf "%-10s %-8s %-4s\n" 姓名 性別 體重kg  
- 表示左對齊 沒有則右對齊
printf "%d %s\n" 1 "abc"
# 單引號(hào)和雙引號(hào)一樣
# 沒有引號(hào)也可以輸出

  • printf的轉(zhuǎn)義序列
序列 說明
\a 警告字符狮腿,通常為ASCII的BEL字符
\b 后退
\c 抑制(不顯示)輸出結(jié)果中任何結(jié)尾的換行字符(只在%b格式指示符控制下的參數(shù)字符串中有效),而且呕诉,任何留在參數(shù)里的字符缘厢、任何接下來的參數(shù)以及任何留在格式字符串中的字符,都被忽略
\f 換頁(formfeed)
\n 換行
\r 回車(Carriage return)
\t 水平制表符
\v 垂直制表符
\ 一個(gè)字面上的反斜杠字符
\ddd 表示1到3位數(shù)八進(jìn)制值的字符甩挫。僅在格式字符串中有效
\0ddd 表示1到3位的八進(jìn)制值字符

test 命令

if test $a 

流程控制

  • if else
if condition
then
         command1
elseif condition2
then 
        command2
else
         command3
fi
  • for 循環(huán)
for var in item1,item2...itemN
do 
     command1
    command1
done
  • while
while condition
do
      command
done

-until 循環(huán) 直到條件為true為止

until  condition
do
    command
done

-case 多選擇語句

case 值 in
模式一)
         command1
          ;;
模式二)
          command2
           ;;
*)
           command3
            ;;
esac

-break
允許跳出所有循環(huán)

  • continue
    跳出當(dāng)前循環(huán)

shell函數(shù)

[ function ] funname [()]

{

    action;

    [return int;]

}
  • 在Shell中贴硫,調(diào)用函數(shù)時(shí)可以向其傳遞參數(shù)。在函數(shù)體內(nèi)部捶闸,通過 n 的形式來獲取參數(shù)的值夜畴,例如拖刃,1表示第一個(gè)參數(shù)删壮,$2表示第二個(gè)參數(shù)...
  • 調(diào)用 funName 1 2 3

shell 輸入/輸出重定向

命令 說明
command > file 將輸出重定向到 file。
command < file 將輸入重定向到 file兑牡。
command >> file 將輸出以追加的方式重定向到 file央碟。
n > file 將文件描述符為 n 的文件重定向到 file。
n >> file 將文件描述符為 n 的文件以追加的方式重定向到 file。
n >& m 將輸出文件 m 和 n 合并亿虽。

n <& m 將輸入文件 m 和 n 合并菱涤。
<< tag 將開始標(biāo)記 tag 和結(jié)束標(biāo)記 tag 之間的內(nèi)容作為輸入。

  • 需要注意的是文件描述符 0 通常是標(biāo)準(zhǔn)輸入(STDIN)洛勉,1 是標(biāo)準(zhǔn)輸出(STDOUT)粘秆,2 是標(biāo)準(zhǔn)錯(cuò)誤輸出(STDERR)。
  • here Document
command << delimiter
    document
delimiter

shell 文件包含

 使用 . 號(hào)來引用test1.sh 文件
 ./test1.sh
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末收毫,一起剝皮案震驚了整個(gè)濱河市攻走,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌此再,老刑警劉巖昔搂,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異输拇,居然都是意外死亡摘符,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門策吠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逛裤,“玉大人,你說我怎么就攤上這事猴抹”鸢迹” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵洽糟,是天一觀的道長炉菲。 經(jīng)常有香客問我,道長坤溃,這世上最難降的妖魔是什么拍霜? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮薪介,結(jié)果婚禮上祠饺,老公的妹妹穿的比我還像新娘。我一直安慰自己汁政,他們只是感情好道偷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著记劈,像睡著了一般勺鸦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上目木,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天换途,我揣著相機(jī)與錄音,去河邊找鬼。 笑死军拟,一個(gè)胖子當(dāng)著我的面吹牛剃执,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播懈息,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼肾档,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辫继?” 一聲冷哼從身側(cè)響起阁最,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎骇两,沒想到半個(gè)月后速种,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡低千,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年配阵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片示血。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棋傍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出难审,到底是詐尸還是另有隱情瘫拣,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布告喊,位于F島的核電站麸拄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏黔姜。R本人自食惡果不足惜拢切,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秆吵。 院中可真熱鬧淮椰,春花似錦、人聲如沸纳寂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毙芜。三九已至忽媒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間爷肝,已是汗流浹背猾浦。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工陆错, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留灯抛,地道東北人金赦。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像对嚼,于是被迫代替她去往敵國和親夹抗。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容