Linux shell程式設計學習筆記(一)

2021-10-01 20:41:00 字數 4159 閱讀 6585

#!/bin/bash 申明這是乙個shell指令碼檔案

(1)./接檔名.sh的方式執行   (2)/bin/sh   ./檔名.sh

區別:第一種直接以點斜槓執行的方式,有時候需要先賦予檔案可執行許可權,第二種方式則可以直接執行,不需要賦予執行許可權

(1)變數定義:直接a=123或者file=「d:/xuexi/」 即可

(2)變數的引用:$a或者$file 注意$與變數名之間不能有空格;$不僅可以引用變數,也可以直接引用其他命令的執行結果,然後賦值給其他變數

如:user=$(cat /root/users.txt)

$# 是傳給指令碼的引數個數

$0 是指令碼本身的檔名

$1 是指令碼後接的第乙個引數

$2 是指令碼後接的第二個引數

$@ 是傳給指令碼的所有引數列表,"$1" "$2" "$3" … "$n"

$* 是以乙個單字串顯示傳給指令碼的所有引數,"$1 $2 $3 … $n"

$$ 是指令碼執行的當前程序id號

$? 是最後執行命令的結束狀態碼,0表示沒有錯誤,其他表示有錯誤

表示字元或者字串需要用雙引號引起來;

注意單引號與反引號的區別:反引號是鍵盤上esc鍵下的那個鍵,與單引號是不同的,命令可以放在反引號裡執行,但是不能放在單引號裡執行,放在單引號裡就成了字串

格式:

if 條件判斷1;then

條件判斷1成立時執行的操作

…elif 條件判斷2;then

條件判斷2成立時執行的操作

…else

所有條件判斷都不成立時執行的操作

fi

#!/bin/bash

read -p "請輸入你的分數" a

if[ -z $a];

then

echo

"分數的有效範圍是 0~100分!!!"

exit

fiif

[$a -ge 0 ]&&[

$a -le 59 ]

;then

echo

"安慰獎"

elif

[$a -ge 60 ]&&[

$a -le 70 ]

;then

echo

"三等獎 "

elif

[$a -ge 71 ]&&[

$a -le 80 ]

;then

echo

"二等獎 "

elif

[$a -ge 81 ]&&[

$a -le 90 ]

;then

echo

"一等獎 "

elif

[$a -ge 91 ]&&[

$a -le 100 ]

;then

echo

"特等獎 "

else

echo

"分數的有效範圍是 0~100分!!!"

fi

注意:

(1)有時候if後的判斷條件需要用單/雙圓括號或者單/雙中括號 括起來

(2)if條件後接分號;再接then ,注意語句塊間的縮排對齊

**linux中shell條件判斷if中的-a到-z的意思可參考:

[ -a file ] 如果 file 存在則為真

[ -d file ] 如果 file 存在且是乙個目錄則為真

[ -z string ] 「string」 的長度為零則為真

for 變數名  in 變數值列表

do迴圈體

done

#!/bin/bash

num=0

for i in

doif[`

expr $i % 2`

-eq 0 ]

;then

echo

$ilet num++

fidone

echo

"1-254 之間的偶數 "

$num

" 個"

while 條件測試操作

do命令序列

done

#!/bin/bash

prefix=

"stu"

i=1while

[$i -le 10 ]

douseradd$$i

echo

"123456"

|passwd --stdin $$i&

> /dev/null

let i++ #let的用法

done

[root@localhost ~]

# sh useraddwhile.sh

[root@localhost ~]

# tail /etc/passwd

stu1:x:1005:1005::/home/stu1:/bin/bash

stu2:x:1006:1006::/home/stu2:/bin/bash

stu3:x:1007:1007::/home/stu3:/bin/bash

stu4:x:1008:1008::/home/stu4:/bin/bash

stu5:x:1009:1009::/home/stu5:/bin/bash

stu6:x:1010:1010::/home/stu6:/bin/bash

stu7:x:1011:1011::/home/stu7:/bin/bash

stu8:x:1012:1012::/home/stu8:/bin/bash

stu9:x:1013:1013::/home/stu9:/bin/bash

stu10:x:1014:1014::/home/stu10:/bin/bash

迴圈體內部,通過語句「let i++」(等同於i=expr $i + 1)來是變數i的值增加1,一直迴圈,直到滿足條件為止

until command

dostatement(s) to be executed until command is true

done

#!/bin/bash

declare -i i=10

declare -i sum=0

until

((i>

10))

dolet sum+=i

let ++i

done

echo

$sum

三種迴圈同樣支援:break continue*

case 變數值 in

模式1)

命令序列1;;

模式2)

命令序列2;;

……* )

預設命令序列

esac

#!/bin/bash

read -p "請輸入乙個字元,並按enter鍵確認:" key

case

"$key"

in[a-z]

|[a-z]

)echo

"你輸入的是字母 $key";;

[0-9]

)echo

"你輸入的是數字 $key";;

*)echo

"你輸入的是非法字元 $key"

esac

[root@localhost ~]

# sh hitkey.sh

請輸入乙個字元,並按enter鍵確認:1

你輸入的是數字 1

[root@localhost ~]

# sh hitkey.sh

請輸入乙個字元,並按enter鍵確認:w

你輸入的是字母 w

[root@localhost ~]

# sh hitkey.sh

請輸入乙個字元,並按enter鍵確認:@

你輸入的是非法字元 @

read -p 引數1 引數2 表示將讀取引數1的內容,並賦值給引數2(相當於定義了乙個變數同時為其賦值)

read 還可以讀取使用者輸入,如:read -p 「請輸入你的分數」 a 表示提示並讀取使用者輸入,並儲存在變數a中

linux Shell程式設計學習筆記

linux shell程式設計 bin bash 這行據說是用來選擇shell的,但是我刪掉試了試沒什麼區別 據說是在某些版本的shell下會出錯。變數定義 如無格式要求可以不定義,如果需要宣告格式用declare命令。declare test test test declare afirx 引數說...

Linux Shell 程式設計學習(二)

case多選結構 基本結構 case word in case 1 command 1 case 2 command 2 case 3 command 3 case n command n esac 乙個demo while 迴圈 while test commands do command sel...

Linux Shell 程式設計學習筆記 1

linux shell命令主要有三種 內部命令,shell函式,和外部命令 內部命令 內部命令是shell直譯器本身包含的命令,在檔案系統中沒有相應的可執行檔案。例如,cd命令和echo命令就是兩個常用的shell內部命令。命令列在執行內部命令時,不需要建立新的程序,當然也就不需要銷毀程序。互動式的...