linux學習(十三)shell

2021-09-17 05:05:50 字數 2557 閱讀 9616

宣告及感謝, 本文為參照朱有鵬的linux課程總結的, 在此對朱有鵬老師表示感謝.

shell 是一類變成語言:

shell 語言有很多種,

linux下常用的指令碼語言其實就是bash, sh:

shell 程式執行的方式有三種

第一種: ./xx.sh 這種是需要可執行許可權的, 可以使用 chmod a+x xx.sh來新增可執行程式(a+x是給所有人加上可執行許可權,包括所有者,所屬組,和其他人, o+x 只是給其他人加上可執行許可權)

第二種: source xx.sh // shource 是linux的乙個命令, 這個命令就是用來執行指令碼程式的, 這樣執行不需要指令碼具有可執行許可權.

第三種: bash xx.sh // bash 是乙個指令碼程式直譯器, 本質上是乙個可執行程式, 這樣執行相當於我們執行了bash程式, 然後把xx.sh作為ar**[1]傳給他執行

shell 程式的第一行 一般都是: #!/bin/sh

這行話以#!開頭, 後面加了乙個pathname, 這是指定shell程式被哪個直譯器執行,. 所以這裡就是被/bin/sh執行.

shell 指令碼注釋是用#來注釋, 相當於c語言中的 //

shell 指令碼中的變數

string="hello world"

echo $string

shlle 語言是弱型別語言, 定義的變數是沒有型別的

變數賦值使用=進行賦值, 但是=兩邊是不能有空格的 並且後面語句沒有;結束符

然後呼叫變數是使用$進行呼叫.

注意: shell對語法非常在意, 非常嚴格. 很多地方空格都是必須沒有或者必須有,而且不能隨意有沒有空格.

shell 中直接使用字串可以直接使用, 而且有空格時也可以, 但是缺陷是不能輸出 "(雙引號) 還有其他的轉義字元

echo hello world

echo 'hello \nworld'

echo "hello \nworld"

從上面**中看到 第一行是 不能列印其他符號, 比如 " 列印即出錯

第二行: 是單引號括起來, 表示 字面替換, 引號有啥,有列印啥

所以會列印出 hello \nworld

第三行 雙引號括起來, 當有轉義字元, 將會使用到轉義字元

(4)雙引號中:

$加變數名可以取變數的值

反引號仍表示命令替換

\$表示$的字面值 輸出$符號

\`表示`的字面值

\"表示"的字面值

\\表示\的字面值

除以上情況之外,在其它字元前面的\無特殊含義,只表示字面值。

if語句

if [表示式]; then

***else

yyyif

注意 if判斷條件[ ] 裡面, 前後都必須有空格

判斷檔案是否存在: -f

判斷目錄是否存在 -d

判斷字串是否相等 「str1」 = 「str2」 , 注意用乙個等號而不是兩個

判斷數字是否相等: -eq

判斷數字是否大於 -gt

判斷數字是否小於 -lt

判斷數字大於等於 -ge

判斷數字是否小於等於 -le

判斷字串是否為空 -z, 注意-z判斷時如果變數本身沒定義也是不成立(也就是說-z認為沒定義不等於空)

邏輯或 -o

最終的if中是否成立取決於2個式子的邏輯或運算結果

邏輯與&&和邏輯或||與簡寫的if表示式相結合

while 語句

while 語句後面的[ ] 必須要有空格,[ ] 後面有分號,

echo

使用echo 穿件乙個檔案 並輸入內容使用 >

還可以使用echo指令配合追加符號 >>

case 語句

注意case 中break 跳出去的不是case 語句, 而是乙個外面的哪個迴圈語句

shell 中的傳參

與c語言中的傳參有點不一樣

譬如c語言中 ./a.out aa bb cc 則 argc = 4 ar**[0] = ./a.out ar**[1] 是第乙個有效引數

shell 中 source a.sh aa bb cc $#(引數個數) = 3, $0 是執行這個shell 程式的解析程式的名字

$1是第乙個有效引數值, $2 是第二個有效引數的值.

shell 中的shift找那個

shell中的$# $1等內建變數的值不是不可變的,而是可以被改變,被shift指令改變。shift指令有點像左移運算子,把我們給shell程式的傳參左移了乙個移出去了,原來的$2變成了新的$1,原來的$#少了1個。
shell 呼叫linux指令

譬如

var=`pwd`

var1=$(shell pwd)

all:

@echo $(var)

@echo $(var1)

注意看第一條var 變數呼叫反引號(esc)按鍵下面, 即可使用pwd 命令

第二條var1 使用的$(shell pwd) 同樣也能使用pwd命令

Shell 十三問 的學習記錄

在 bbs上看到了shell十三問的帖子,由於比較就遠了,怕以後再也找不到了,就把筆記貼過來了,shell 十三問 貼出我做的筆記 一 為何叫做shell 使用者通過shell 作業系統即核心kernel的外殼 與kernel溝通,這是shell與kernel的命名的關係。從技術角度講,shell的...

Shell 十三問整理

組成 literal meta 就是一些字母單詞,組成命令的 特殊保留字元,對於shell有特殊意義 重點meta有分command meta和shell meta 舉例awk 1.txt 這裡 會被解釋成shell meta。awk 1.txt 中的 被解釋成command meta 常見meta...

shell學習十三天 sed案例分析

sed的使用案例 使用sed 操作 etc passwd,最好複製乙份 cp etc passwd tmp 操作tmp 下的passwd 其實不用 因為在一般情況下 sed只是修改了輸出結果 不會改變檔案本身 除非要求這麼做 以行為單位的新增 刪除 要求 將 etc passwd 的內容列出並且列印...