Shell 看完就會用

SHELL

一 什么是 Shell


shell 直譯為殼,shell 是一個命令解釋器,處于內(nèi)核和用戶之間,負責(zé)把用戶的指令傳遞給內(nèi)核并將執(zhí)行結(jié)果回顯給用戶,同時 shell 也是一門編程語言。
shell 之所以被稱為 shell ,是因為它隱藏了操作系統(tǒng)的底層細節(jié)。Unix 下的一些圖形用戶界面如 GNONE 、KDE... 也被稱為是 “虛擬 shell”

二 常見的幾種 shell


  • Bourne Shell (sh):它是 Unix 的默認 shell,也是其它 shell 的開發(fā)基礎(chǔ),但是在交互方面不如其它 shell,sh 的創(chuàng)始人是 Steven Bourne,為了紀念他也是以他的名字來命令
  • C Shell(csh):csh 的語法和 C 語言很類似,在交互方面有了很大的改善如:命令不全,命令別名等,但是 csh 和 sh 不兼容
  • Korn Shell(ksh):是 csh 的一個加強版,集合了 csh 和 sh 的優(yōu)點,并且兼容 sh
  • Bourne Again Shell (bash):是自由軟件基金會(GNU)開發(fā)的一個Shell,它是Linux系統(tǒng)中一個默認的Shell。Bash不但與Bourne Shell兼容,還繼承了C Shell、Korn Shell等優(yōu)點。
  • Zsh:在兼容 bash 的同時提供了更多的改進

三 常用功能


  1. 歷史命令
  • 查看歷史記錄
history  // 查詢歷史記錄,顯示最近使用的2000條命令(默認兩千)
  • 修改顯示記錄數(shù)
vi /etc/profile  //修改環(huán)境變量配置文件
HISTSIZE=1000   //修改默認歷史命令條數(shù)

source /etc/profile 使環(huán)境變量生效
  • 把內(nèi)存中的命令歷史保存到文件中(歷史默認保存在 ~/.bash_history
    文件中)
    打開 terminal 后,我們在沒有關(guān)閉 terminal 前,在當前 terminal 的操作命令會保存在內(nèi)存中,直到當前 terminal 關(guān)閉后,內(nèi)存中的命令歷史才會被寫入到 ~/.bash_history 文件中。
    如果我們需要強制將內(nèi)存中的命令歷史保存在 ~/.bash_history 文件中,使用
history  -w //把內(nèi)存中命令歷史,保存入文件
  • 清空歷史
history  -c 
  • 重復(fù)歷史命令
!n          //重復(fù)第n條命令
!str        //重復(fù)最后一個以str開頭的命令
上箭頭     //調(diào)用上面的命令
  1. 別名
  • 查看系統(tǒng)中已有的別名
alias
  • 設(shè)置別名
alias  ls='ls  --color=never'   手工設(shè)定別名,臨時生效
vi  ~/.bashrc       在 ~/.bashrc 寫入別名,永久生效
  1. 輸出重定向
    即把輸出在屏幕上的信息重定向到文件中(比如 log 信息)
>   覆蓋
  ls  >  aa     將 ls 命令顯示的信息覆蓋到 aa 文件中

>>  追加
ls  >>  aa      將 ls 命令顯示的信息追加到 aa 文件中

ls  gdlslga  2>>aa    將錯誤信息輸出到 aa 文件中(ls gdlsga 命令會出錯)

ls  >> aa  2>>bb      將正確信息輸出到 aa 文件中,錯誤信息輸出到 bb 中

ls  >>  aa  2>&1      將正確和錯誤信息都追加在 aa 中
  1. 多命令順序執(zhí)行
  • 命令1 ; 命令2 ; 命令3 //命令123順序執(zhí)行。之間沒有任何關(guān)系
  • 命令1 && 命令2 //命令1正確執(zhí)行后,命令2才會執(zhí)行
  • 命令1 || 命令2 //命令1執(zhí)行不正確,命令2才會執(zhí)行
  1. 管道符
    命令1 | 命令2//命令1的執(zhí)行結(jié)果,作為命令2的執(zhí)行條件
netstat -tlun | grep 80                 查詢監(jiān)聽的端口號,并查看80端口是否啟動。
  1. 鍵盤讀取
read  -p “提示信息”   [-t  等待時間]   變量名

# example.sh #
#!/bin/bash
read -p "please input num1:" -t 30  test1
read -p "input num2:" -t 30  test2
sum=$(( $test1 + $test2))
echo “num1 +  num2 = $sum”
  1. 數(shù)值運算
    變量默認是字符串類型,進行數(shù)值運算可有下面三種方法
num1=123
num2=456

1 declare -i sum=$num1+$num2
2 sum=$(( $num1 + $num2 ))
3 sum=$(expr $num1 + $num2)     注意+左右必須空格

支持的運算操作 +   -  \*  /  %取余

四 變量


變量設(shè)定規(guī)則

  • 變量以等號連接值,等號不能有空格
  • 變量名由數(shù)字和字母和下劃線組成,不能以數(shù)字開頭
  • 變量值中有空格,用引號括起來
  • 雙引號內(nèi),有特殊字符。如$
  • 單引號中特殊字符無含義
  • 在變量值中,可以使用\轉(zhuǎn)義符
  • 變量值可以直接調(diào)用系統(tǒng)命令。 `命令` $(命令)
  • 變量值可以累加 aa=123 aa="$aa"456 echo $aa --->123456
  • 環(huán)境變量一定設(shè)為大寫
  1. 本地變量
  • 聲明
變量名=變量值     注意:=號左右不能有空格
aa=123
  • 調(diào)用
echo $aa
  • 查看變量
set     查看所有變量,包括環(huán)境變量和本地變量
  • 刪除
unset 變量名
  1. 環(huán)境變量
  • 聲明
export  變量名=變量值
  • 查看
set 查看所有變量
env、export 只查看環(huán)境變量
  • 聲明變量類型
declare     聲明變量類型的,如果不特別聲明,所有變量為字符串型
-i   聲明為int 
-x   聲明為環(huán)境變量
  • 刪除
unset 變量名
  • 環(huán)境變量配置文件
/etc/profile
/etc/bashrc     所有用戶生效

~/.bashrc
~/.bash_profile 只對指定用戶生效
  1. 位置參數(shù)變量
    在執(zhí)行 shell 腳本時手動傳入?yún)?shù)
    eg:
sh example.sh a b 


 # example.sh #
#!/bin/bash

echo "the  command  is  $0"    // $0 代表命令自己
echo "param1 is  $1"      // $1 代表第一個參數(shù)即 a
echo "param2 is $2"       // $2 代表第一個參數(shù)即 b

五 常用命令


  1. 行提取命令 grep
選項: 
  -v 反向
  -n 顯示行號

grep  “\.$” test.txt -n  // 匹配以 . 結(jié)尾的行并顯示行號
  1. 列提取命令 cut
cut  -d  “分隔符”  -f  提取列   文件名

more /etc/passwd | grep "/bin/bash" | cut -d ":" -f 1,3
            提取passwd文件中可以登錄的用戶的用戶名和UID

六 條件判斷


格式

test  測試條件  測試內(nèi)容
或
[ 測試條件 測試內(nèi)容 ] // [] 中必須有空格
  • 測試文件類型
test  -e  文件名       測試文件是否存在,存在為真
test  -f  文件名       判斷是否是普通文件
test  -d  文件名       判斷是否為目錄
test  -b  文件名       判斷是否為塊設(shè)備文件
test  -c  文件名       字符設(shè)備文件
  • 測試文件權(quán)限
test  -r  文件名       判斷是否有可讀權(quán)限
test  -w  文件名       可寫
test  -x  文件名       執(zhí)行
test  -s  文件名       判斷是否為非空白,有內(nèi)容為真
  • 兩個文檔比較
[ file1  -nt  file2 ]   file1是否比file2新
[ file1  -ot  file2 ]   file1是否比file2舊
[ file1  -ef  file2  ]  file1與file2是否是鏈接文件
  • 兩個數(shù)值之間判斷
[ n1  -eq  n2 ]     n1和n2是否相等
[ n1  -ne  n2 ]     n1和n2是否不等
[ n1  -gt  n2 ]     n1大于n2
[ n1  -lt  n2 ]     n1小于n2
[ n1  -ge  n2 ]     n1大于等于n2
[ n1  -le  n2 ]     n1小于等于n2
  • 判斷字符串
[ -z  字符串 ]     判斷字符串是否為空
[ 字符串1  ==  字符串2 ]  判斷字串1 是否與字串2相等
[ 字符串1  !=  字符串2 ]  判斷字串是否不等
  • 多重判斷
-a      邏輯與
    [ -z $file -a -e $file ]
-o      邏輯或 
!       邏輯非

七 流程控制


  1. if 語句
  • 單分支
if  條件測試命令 
      then   命令序列
fi
  • 雙分支
if  條件測試命令
    then   命令序列1
    else   命令序列2
fi
  • 多分支
if  條件測試命令1  ;  then
        命令序列1
    elif  條件測試命令2  ;  then
    命令序列2
    elif  ...
    else
    命令序列n
fi
  1. for 語句
  • 使用in關(guān)鍵字循環(huán)
for  變量名  in  取值列表
  do
     命令序列
 done 

eg:
for time in morning noon afternoon evening
   do
      echo $time
  done

files=$(ls)  //遍歷 ls 的結(jié)果 
for time in $files 
   do
      echo $time
  done
  • 數(shù)值加加循環(huán)
s=0
for ((i=1;i<=100;i=i+1))
do
    s=$(($s+$i))
done
  • while循環(huán)語句
while  命令或表達式
  do
    命令列表
done
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

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

  • 第一節(jié) Shell概述 1.Shell是什么 Shell是一個命令行解釋器,它為用戶提供了一個向Linux內(nèi)核發(fā)送...
    littlexjing閱讀 1,972評論 0 1
  • 概述 首先,咱們來了解一下,什么是Shell。操作系統(tǒng)內(nèi)核給我們提供了各種接口,同時也提供了各種用戶層的庫,理論上...
    keysaim閱讀 1,404評論 0 0
  • 一,shell題記 不懂shell的程序員不是好程序員,學(xué)習(xí)shell是為了自動化,使用自動化可以非常有效的提高工...
    架構(gòu)師小秘圈閱讀 8,734評論 3 70
  • 一、什么是Shell腳本 示例 看個例子吧: 示例解釋 第1行:指定腳本解釋器,這里是用/bin/sh做解釋器的 ...
    Rick617閱讀 797評論 0 1
  • 細雨如煙滿青城, 行人匆匆欲趕集。 不知西北天尚好, 思心飄去蕩無存。
    曇花終有一現(xiàn)閱讀 339評論 0 0