Linux——Shell

  • Shell是一個命令行解釋器孵奶,實現(xiàn)命令和機(jī)器碼互轉(zhuǎn)
  • Shell是一門編程語言鞋真,是一種解釋執(zhí)行的腳本語言

分類

  • Bourne Shell
    • sh
    • ksh
    • Bash
    • psh
    • zsh
  • C Shell
    • csh
    • tcsh
  • /etc/shells 查看支持的shell

Bash操作

  • bash 進(jìn)入bash
  • exit 退出bash
  • \ 命令換行
  • 歷史命令
    • 上下箭頭調(diào)出歷史命令
    • 單擊Tab鍵補(bǔ)全,雙擊Tab鍵列出所有相似
    • ![num] 重復(fù)執(zhí)行第num條命令
    • !! 重復(fù)執(zhí)行上一條
  • 快捷鍵
    • 快捷鍵傳送門
    • ctrl+c 中斷
    • ctrl+l 清屏竿秆,clear命令清屏
    • ctrl+u 剪切光標(biāo)之前的命令
    • ctrl+y 粘貼
    • ctrl+r 歷史命令中搜索
    • ctrl+d 結(jié)束符障癌,退出當(dāng)前終端
    • ctrl+a 移到行首
    • ctrl+e 移到行尾
    • ctrl+z 暫定框舔,放入后臺
    • ctrl+s 暫停屏幕輸出
    • ctrl+q 恢復(fù)屏幕輸出

腳本基礎(chǔ)

  • 文件后綴 .sh
  • 文件頭 #!/bin/bash
  • # 注釋
  • 執(zhí)行腳本
    • bash xxx.sh
    • 賦予權(quán)限執(zhí)行
      • chmod 755 xxx.sh
      • ./xxx.sh

標(biāo)準(zhǔn)輸入輸出

設(shè)備 設(shè)備文件名 文件描述符 類型
鍵盤 /dev/stdin 0 標(biāo)準(zhǔn)輸入
顯示器 /dev/stdout 1 標(biāo)準(zhǔn)輸出
顯示器 /dev/stderr 2 標(biāo)準(zhǔn)錯誤輸出
  • 輸出重定向
    • [命令] >[文件] 保存正確結(jié)果意荤,覆蓋模式
    • [命令] >>[文件] 保存正確結(jié)果啊片,追加模式
    • [命令] 2>[文件] 保存錯誤信息,覆蓋模式
    • [命令] 2>>[文件] 保存錯誤信息玖像,追加模式
    • [命令] > [文件] 2>&1 保存正確和錯誤紫谷,覆蓋模式
    • [命令] >> [文件] 2>&1 保存正確和錯誤,追加模式
    • [命令] &>[文件] 保存正確和錯誤捐寥,覆蓋模式
    • [命令] &>>[文件] 保存正確和錯誤碴里,追加模式
    • [命令] >> [文件1] 2>>[文件2] 正確追加到文件1,錯誤追加到文件2
  • 輸入重定向
    • wc < [文件名]
      • 把文件作為命令輸入

多命令

  • ; 連接多個命令
  • && 邏輯與上真,命令1成功,執(zhí)行命令2
  • || 邏輯或羹膳,命令1失敗睡互,執(zhí)行命令2
  • | 管道符,命令1的正確輸出作為命令2的操作對象
    • ll /etc | more
    • netstat -an | grep [keywords]
  • & 任務(wù)在后臺執(zhí)行

通配符和特殊字符

  • 通配符
    • ? 一個任意字符
    • * 0或多個任意字符
    • [] 中括號中任意一個字符
    • [-] 中括號中任意一個字符陵像,-代表范圍
    • [^] 不是中括號中的字符
  • 特殊字符
    • '' 單引號中所有特殊字符都沒有特殊含義就珠,原樣輸出
    • "" 雙引號中所有特殊字符都沒有特殊含義
      • 但是以下除外
      • $ 調(diào)用變量的值
      • ` 反引號,引用命令
      • \ 轉(zhuǎn)義符
    • $() 引用系統(tǒng)命令
    • `` 反引號擴(kuò)起來的內(nèi)容是系統(tǒng)命令醒颖,和$()作用一樣
    • # 代表注釋
    • & 后臺執(zhí)行
      • find / -name xxx.sh &
    • \ 轉(zhuǎn)義字符妻怎,在\之后的特殊符號將時區(qū)特殊含義,變?yōu)槠胀ㄗ址?/li>

命令

  • echo [內(nèi)容]
    • 輸出字符
    • -e 轉(zhuǎn)義字符
      • \ 輸出\
      • \a 警告音
      • \b 退格鍵
      • \c 取消行末換行符
      • \e escape鍵
        • echo -e "\e[1;31m abcd \e[0m"
          • 30m 黑色
          • 31m 紅色
          • 32m 綠色
          • 33m 黃色
          • 34m 藍(lán)色
          • 35m 洋紅
          • 36m 青色
          • 37m 白色
      • \f 換頁
      • \n 換行
      • \r 回車鍵
      • \t 制表符泞歉,tab鍵
      • \v 垂直制表符
      • \0nnn 八進(jìn)制ASCII碼
      • \xhh 十六進(jìn)制ASCII碼
    • echo -e "a\tb\tc"
  • dos2unix [文件]
    • windows編碼轉(zhuǎn)換為Linux編碼
    • 2 two to
    • 4 four for
  • history
    • 查看歷史命令
      • 默認(rèn)保存1000條逼侦,/etc/profile,HISTSIZE
    • -c 清空歷史命令
    • -w 把緩存中的歷史命令寫入歷史命令保存文件
      • ~/.bash_history
  • alias
    • 查看別名
  • alias [別名]=[command]
    • 設(shè)置別名腰耙,臨時生效
    • /root/.bashrc
  • unalias [別名]
    • 刪除別名

變量

  • 分類
    • 用戶自定義變量/本地變量
    • 環(huán)境變量榛丢,系統(tǒng)操作環(huán)境相關(guān)的數(shù)據(jù)
      • 環(huán)境變量建議大寫
    • 位置參數(shù)變量,腳本參數(shù)
    • 預(yù)定義變量
  • 用戶自定義變量/本地變量
    • 聲明賦值
      • [變量名]=[變量值]
      • name=zhangsan
      • name="zhang san"
      • name="$date"
      • name=$(date)
    • 連接
      • info=hello"$name"
      • info=hello${name}
    • 調(diào)用
      • $name
    • 查看所有變量
      • set
    • 刪除
      • unset name
  • 環(huán)境變量
    • 聲明賦值
      • export [變量名]=[變量值]
      • export [本地變量]
    • 查詢
      • env
    • 調(diào)用
      • $[變量名]
    • 刪除
      • unset [變量名]
    • 常見環(huán)境變量
      • PATH
        • 系統(tǒng)查找命令的路徑
        • echo $PATH
        • PATH="$PATH":/xxx 追加
      • PS1
        • 系統(tǒng)提示符格式 [root@localhost ~]#
          • $ root提示#挺庞,普通用戶提示$
        • echo $PS1
  • 位置參數(shù)變量
    • $n 命令行參數(shù)傳遞給腳本
      • $0 命令本身
      • $1-$9 第1到9個參數(shù)
      • ${10} 10個以上參數(shù)
      • bash xxx.sh zhangsan 18
        • $0 xxx.sh
        • $1 zhangsan
        • $2 18
    • $* 所有參數(shù)晰赞,一個字符
    • $@ 所有參數(shù),字符數(shù)組
    • $# 參數(shù)個數(shù)
  • 預(yù)定義變量
    • $? 最后一次執(zhí)行命令的返回狀態(tài)
      • 0 執(zhí)行正確
      • 非0 執(zhí)行不正確
    • $$ 當(dāng)前進(jìn)程的PID
    • $! 最后一個后臺進(jìn)程的PID
  • read [變量名]
    • 接受鍵盤輸入
    • -p [提示信息] 提示信息
    • -t [描述] 等待用戶輸入,等待時間
    • -n [字符數(shù)] 只接受指定字符數(shù)
    • -s 隱藏輸入的數(shù)據(jù)

數(shù)值運算與運算符

  • declare [+/-][選項] [變量名]
    • 聲明變量類型
    • - 為變量設(shè)定類型屬性
    • + 取消變量的類型屬性
    • -i 整型
    • -x 環(huán)境變量
    • -p 顯示變量的類型
      • declare -p [變量名]
  • 數(shù)值運算
#! /bin/bash

num1=$1
num2=$2
declare -i sum=$num1+$num2
echo "方式一:$sum"

echo "方式二:$(expr $num1 + $num2)"

echo "方式三:$(($num1+$num2))"
echo "方式三:$[$num1+$num2]"
  • 運算符
    • + - * / % && ||

環(huán)境變量配置文件

  • source [配置文件]
    • 使配置文件生效掖鱼,另一種寫法 . [配置文件]
  • 配置文件
    • 所有用戶生效
      • /etc/profile
        • USER
        • LOGNAME
        • MAIL
        • PATH
        • HOSTNAME
        • HISTSIZE
        • umask
        • 調(diào)用/etc/profile.d/*.sh
      • /etc/profile.d/*.sh
      • /etc/bashrc
        • PS1
        • umask
        • PATH
        • 調(diào)用/etc/profile.d/*.sh
    • 只對用戶生效
      • ~/.bash_profile
        • 調(diào)用~/.bashrc
      • ~/.bashrc
    • 用戶登錄時讀取順序
      • /etc/profile
        • /etc/profile.d/*.sh
      • ~/.bash_profile
        • ~/.bashrc
      • /etc/bashrc
    • ~/.bash_logout
      • 注銷時讀取
    • ~/.bash_history
      • 命令歷史
    • /etc/issue
      • 本地終端歡迎信息
    • /etc/issue.net
      • 遠(yuǎn)程終端歡迎信息
    • /etc/motd
      • 登錄后歡迎信息

正則表達(dá)式

  • 在文件中匹配符合條件的字符串
    • grep awk sed 支持正則表達(dá)式
  • * 前一個字符匹配0次或任意多次
  • . 匹配除了換行符外任意一個字符
  • ^ 匹配行首
  • $ 匹配行尾
  • [] 匹配中括號中任意一個字符
  • [^] 匹配中括號字符意外的任意一個字符
  • \ 轉(zhuǎn)義符
  • {n} 前面的字符出現(xiàn)n次
  • {n,} 前面的字符至少出現(xiàn)n次
  • {n,m} 前面的字符至少出現(xiàn)n次然走,最多出現(xiàn)m次

字符處理

  • cut [文件名]
    • 列提取
    • -f [第幾列,..] 獲取列信息
    • -d [分隔符] 指定分隔符,默認(rèn)制表符
    • cut -f 1 -d : /etc/passwd
  • printf '[輸出格式][輸出類型]' [輸出內(nèi)容]
    • 格式化輸出
    • 類型
      • $ns 字符串
      • %ni 整數(shù)
      • %m.nf 小數(shù)
        • %8.2 輸出8位戏挡,6位整數(shù)芍瑞,2位小數(shù)
    • 格式
      • \a 警告音
      • \b 退格鍵
      • \f 清屏
      • \n 換行
      • \r 回車
      • \t 水平制表符
      • \v 垂直制表符
    • printf '%s %s\n' 1 2 3 4 5 6
  • awk [選項] '條件{動作}...' [文件名]
    • 文本分析工具
    • 選項
      • -F[分隔符] 指定分隔符
    • 條件
      • 關(guān)系表達(dá)式
    • 動作
      • 格式化輸出
      • 流程控制語句
    • df -h | awk '{print $1 "\t" $3}'
      • print 輸出,行尾換行
      • 打印第一列和第三列信息
  • sed [選項] '[動作]' [文件名]
    • 流編輯器增拥,對數(shù)據(jù)進(jìn)行選取啄巧、替換、刪除掌栅、新增
    • 選項
      • -n 將sed處理的結(jié)果輸出到屏幕
      • -e 允許對輸入數(shù)據(jù)進(jìn)行多條sed命令編輯秩仆,用;分隔
      • -i sed修改的結(jié)果保存到文件,默認(rèn)不會修改文件猾封,修改的是輸出
    • 動作
      • a [數(shù)據(jù)] \ 追加澄耍,除最后一行,每行用\結(jié)尾
      • c [數(shù)據(jù)] \ 行替換晌缘,除最后一行齐莲,每行用\結(jié)尾
      • i [數(shù)據(jù)] \ 插入,除最后一行磷箕,每行用\結(jié)尾
      • d 刪除
      • p 打印
      • s/[舊字符串]/[新字符串]/g 字符串替換
    • sed -n '2p' xxx
      • 輸出第2行
    • sed '2,4d' xxx
      • 刪除第2到4行
    • sed '2a hello ' xxx
      • 第二行追加hello
  • sort [文件名]
    • 排序
    • -f 忽略大小寫
    • -n 以數(shù)值型進(jìn)行排序选酗,默認(rèn)使用字符串型排序
    • -r 反向排序
    • -t [分隔符] 指定分隔符,默認(rèn)是制表符
    • -k [n,m] 指定字段排序岳枷,-k [2,2] 指定第二個字段排序
  • wc [文件名]
    • -c 統(tǒng)計字節(jié)數(shù)
    • -w 統(tǒng)計單詞數(shù)
    • -l 統(tǒng)計行數(shù)

條件判斷

  • 文件類型
    • -d 文件是否存在芒填,存在且為目錄,則真
    • -e 文件是否存在
    • -f 文件是否存在空繁,存在且為普通文件殿衰,則真
    • -L 文件是否存在,存在且為符號鏈接文件盛泡,則真
  • 文件權(quán)限
    • -r 文件是否存在闷祥,存在且有讀權(quán)限,則真
    • -w 文件是否存在傲诵,存在且有寫權(quán)限凯砍,則真
    • -x 文件是否存在,存在且有執(zhí)行權(quán)限掰吕,則真
  • 文件間比較
    • [文件1] -nt [文件2] 文件1修改時間是否比文件2新
    • [文件1] -ot [文件2] 文件1修改時間是否比文件2舊
    • [文件1] -ef [文件2] 文件1是否和文件2的inode一致果覆,是否為同一文件
  • 兩個整數(shù)之間比較
    • num1 -eq num2 等于
    • num1 -ne num2 不等于
    • num1 -gt num2 大于
    • num1 -lt num2 小于
    • num1 -ge num2 大于等于
    • num1 -le num2 小于等于
  • 字符串判斷
    • -z 字符串 是否為空
    • -n 字符串 是否非空
    • str1 == str2
    • str1 != str2
  • 檢查條件
    • test -f 文件[-f 文件]

流程控制

  • 單分支if條件語句
if [ 條件判斷 ];then
...
fi
if [ 條件判斷 ]
    then
        ...
fi
  • 多分支if條件語句
if [ 條件判斷 ]
    then
        ...
elif [ 條件判斷 ]
    then
        ...
else
    ...
fi
  • exit

    • 退出腳本
    • exit [num]
  • 多分枝case條件語句

    • 只能判斷一種條件
case $變量 in
    "值")
        ...
        ;;
    "值")
        ...
        ;;
    *)
        ...
        ;;
esac
  • for循環(huán)
for 變量 in 值1 值2...
    do
        ...
    done
for ((i=1;i<=100;i=i+1))
    do
        ...
    done
  • while循環(huán)
    • 不定循環(huán),條件成立則循環(huán)
while [ 條件判斷 ]
    do
        ...
    done
  • until循環(huán)
    • 不定循環(huán)殖熟,條件不成立則循環(huán)
while [ 條件判斷 ]
    do
        ...
    done

實例

  • 遠(yuǎn)程下載文件輸出內(nèi)容到屏幕
#!/bin/bash

if [ ! -d "./downloads/" ];then
        mkdir downloads
fi

cd downloads

wget http://xxx.com/xxx.zip
echo 下載完成

unzip xxx.zip
echo 解壓完成

rm -f xxx.zip

content=$(cat xxx.txt)
echo ===輸出開始===
echo -e "\e[1;32m$content\e[0m"
echo ===輸出結(jié)束===

rm -f xxx.txt
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末局待,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钳榨,老刑警劉巖舰罚,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異薛耻,居然都是意外死亡营罢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門饼齿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饲漾,“玉大人,你說我怎么就攤上這事缕溉】即” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵证鸥,是天一觀的道長僚楞。 經(jīng)常有香客問我,道長枉层,這世上最難降的妖魔是什么泉褐? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮鸟蜡,結(jié)果婚禮上膜赃,老公的妹妹穿的比我還像新娘。我一直安慰自己揉忘,他們只是感情好财剖,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著癌淮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沦补。 梳的紋絲不亂的頭發(fā)上乳蓄,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機(jī)與錄音夕膀,去河邊找鬼虚倒。 笑死,一個胖子當(dāng)著我的面吹牛产舞,可吹牛的內(nèi)容都是我干的魂奥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼易猫,長吁一口氣:“原來是場噩夢啊……” “哼耻煤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤哈蝇,失蹤者是張志新(化名)和其女友劉穎棺妓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炮赦,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡怜跑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吠勘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片性芬。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖剧防,靈堂內(nèi)的尸體忽然破棺而出植锉,到底是詐尸還是另有隱情,我是刑警寧澤诵姜,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布汽煮,位于F島的核電站,受9級特大地震影響棚唆,放射性物質(zhì)發(fā)生泄漏暇赤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一宵凌、第九天 我趴在偏房一處隱蔽的房頂上張望鞋囊。 院中可真熱鬧,春花似錦瞎惫、人聲如沸溜腐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挺益。三九已至,卻和暖如春乘寒,著一層夾襖步出監(jiān)牢的瞬間望众,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工伞辛, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留烂翰,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓蚤氏,卻偏偏與公主長得像甘耿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子竿滨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353