#!/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內部命令。命令列在執行內部命令時,不需要建立新的程序,當然也就不需要銷毀程序。互動式的...