廣告行業(yè)網(wǎng)站建設(shè)方案網(wǎng)站優(yōu)化塔山雙喜
shell腳本
功能性語句
test
可測試對象三種:字符串 整數(shù) 文件屬性
每種測試對象都有若干測試操作符
1)字符串的測試:
s1 = s2 測試兩個字符串的內(nèi)容是否完全一樣
s1 != s2 測試兩個字符串的內(nèi)容是否有差異
-z s1 測試s1 字符串的長度是否為0
-n s1 測試s1 字符串的長度是否不為0
2)整數(shù)的測試:
a -eq b 測試a 與b 是否相等 equal
a -ne b 測試a 與b 是否不相等 not equal
a -gt b 測試a 是否大于b greater than
a -ge b 測試a 是否大于等于b greater equal
a -lt b 測試a 是否小于b litter than
a -le b 測試a 是否小于等于b litter equal
3)文件屬性的測試:
-d name 測試name 是否為一個目錄
-f name 測試name 是否為普通文件
-e name 測試文件是否存在
#!/bin/bash
#A=5
#A=`expr $A + 1`
#((A++))
# read -p "input:" a b c d
# SUM=`expr $a \* $b + $c - $d / $b`
# ((S=a*b+c-d/b))
# echo $SUM
# echo $S#測試兩個字符串的內(nèi)容是否完全一樣
VAR="nihao"
test $VAR = "hello"
echo $?#測試兩個字符串的內(nèi)容是否有差異
VAR="nihao"
test $VAR != "hello"
echo $?#測試字符串的長度是否為0
test -z $VAR
echo $?#測試字符串的長度是否不為0
test -n $VAR
echo $?
#測試兩個數(shù)是否相等
test 10 -eq 20
echo $?
#測試兩個數(shù)是否不相等
test 10 -ne 20
echo $?
#測試a是否 > b
test 10 -gt 20
echo $?
#測試a是否 >= b
test 10 -ge 20
echo $?
#測試a是否 < b
test 10 -lt 20
echo $?
#測試a是否 <= b
test 10 -le 20
echo $?read -p "input:" F
#測試是否為一個目錄
test -d $F
echo $?
#測試是否為普通文件
test -f $F
echo $?
#測試文件是否存在
test -e $F
echo $?
結(jié)構(gòu)性語句
if語句
基本結(jié)構(gòu):
if 條件
then
命令表1
else
命令表2
fi
多路分支語句:
if 條件1
then
命令表1
elif 條件2
then
命令表2
fi
嵌套結(jié)構(gòu):
if 條件1
then
if 條件2
then
命令表1
fi
else
命令表2
fi
補(bǔ)充操作符:
-o 或運(yùn)算 例如 [ $a -lt 20 -o $b -gt 100 ] 返回 true
-a 與運(yùn)算 例如 [ $a -lt 20 -a $b -gt 100 ] 返回 false
! 非運(yùn)算 例如 [ ! false ] 返回 true
&& 邏輯與 例如 [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 邏輯或 例如 [[ $a -lt 100 || $b -gt 100 ]] 返回 true
| 位或 例如 echo $[2|2]
&位與 例如 echo $[2&1]
case語句
格式:
case 變量 in
模式1)
命令表1
;;
模式2)
命令表2
;;
*)
命令表n
;;
esac
練習(xí):學(xué)生成績管理系統(tǒng),用shell中的case實(shí)現(xiàn)
90-100:A
80-89:B
70-79:C
60-69:D
<60:不及格
for循環(huán)
格式:
for 變量名 in 單詞表
do
命令表
done
變量依次取單詞表中的各個單詞, 每取一次單詞, 就執(zhí)行一次循環(huán)體中的命令。循環(huán)次數(shù)由單詞表中的單詞數(shù)確定。命令表中的命令可以是一條, 也可以是由分號或換行符分開的多條。
for語句的幾種書寫格式:
1)for i in 1 2 3 4 do....done :
變量i從單詞表中取值
2)for i do...done:
變量i從命令行取值,可以省略in單詞表
3)for i in {1..10} do...done:
變量i從1-10個數(shù)中取值
4)for ((i = 0; i < 10; i++)) do...done:
書寫格式類似c語言
while:
格式:
while 命令或表達(dá)式
do
命令表
done
while語句首先測試其后的命令或表達(dá)式的值,如果為真,就執(zhí)行一次循環(huán)體中的命令,然后再測試該命令或表達(dá)式的值,執(zhí)行循環(huán)體,直到該命令或表達(dá)式為假時退出循環(huán)。
練習(xí):
分別用for和while實(shí)現(xiàn)1-10求和
循環(huán)控制語句
break n :結(jié)束n層循環(huán)
continue n: 結(jié)束n層的本次循環(huán),繼續(xù)下一次循環(huán)
數(shù)組
數(shù)組的賦值:
(1) arr=(1 2 3 4 5)
(2) arr=($1 $2 $3...)
(3) readabc
arr=($a $b $c)
(4) read -a arr
數(shù)組的調(diào)用:
${arr[i]} #引用數(shù)組元素,數(shù)組元素下標(biāo)從0開始到n-1結(jié)束
arr[i]=10 #對數(shù)組元素重新賦值
${arr[@]} #遍歷數(shù)組
${#arr[@]} #數(shù)組元素的個數(shù)
練習(xí):
從終端輸入3個整數(shù),輸出三個數(shù)中的最小值
冒泡排序:
選擇排序:
函數(shù)
函數(shù)的定義方式
(1) 函數(shù)名()
{
命令表
}
(2) function 函數(shù)名()
{
命令表
}
函數(shù)的調(diào)用
函數(shù)名 參數(shù)列表
函數(shù)內(nèi) $1 $2 表示的是傳遞給函數(shù)的參數(shù)
作業(yè):
用shell腳本試下以下功能:
判斷當(dāng)前路徑下是否存在目錄aa,如果不存在創(chuàng)建;遍歷當(dāng)前路徑下的文件,如果是普通文件,將文件復(fù)制到aa目錄下,并計(jì)算文件的個數(shù)。