*邏輯運算符
事件1&&事件2 :事件1 并且事件2成立,整個事件才成立
事件1 ||事件2 :事件1 或者事件2 成立, 整個事件才成立
事件1 -a事件2:and啊:
事件1 -o事件2 :or
示例;
2echo "請輸入一個數(shù)"
3readonly num
4 #if [[$(expr $num%3)==0]||expr $num%5==0]]
if[$(expr $num%3)==0]||[expr $num%5==0]
5then
6echo"3或5的倍數(shù)"
7else
8echo"不是3或5的倍數(shù) "
9fi
例題 判斷輸入的年份是否石閏年
>能被4整除 并且不能被100 整除
>能被400整除
1echo"請輸入年份"
2read year
3if[expr $year %4==0 -a expr $year %100!=0] || [ expr $year % 400==0]
4then
5 echo"閏年"
6else
7 echo"平年"
8fi
**case分支
case 變量 in
值1)
代碼
;;
值2)
代碼
;;
值3)
代碼
;;
.......
;;
case
用法分析:根據(jù)變量存儲的值和下面的值相比較,如果相等,那么就執(zhí)行相應的只里面的代碼
輸入兩個在整數(shù),再輸入一個運算符,根據(jù)運算符的輸入對兩個數(shù)進行運算.使用case語句完成
**while循環(huán)
while[條件]
do
循環(huán)體
done
案例分析
4 i=1
5sum=0
6while [ $i le 100 ]
7do
8 let sum=sum+i
9 let i++
10done
11echo "sum=${sum}"
用法分析:當while后面的條件成立,就執(zhí)行do和done 之間的語句,執(zhí)行玩這個語句之后再回過頭去判斷while后面的條件是否成立,如果條件成立,就繼續(xù)執(zhí)行后面的語句,直到條件不成立,循環(huán)退出
例題
**
**環(huán)境變量
$#:代表可執(zhí)行命令后面的參數(shù)個數(shù)
$0:代表可執(zhí)行命令本身
$1:代表可執(zhí)行命令后后面的第一個參數(shù)
$2:代表可執(zhí)行命令后后面的第2個參數(shù)
....
a寫一個shell腳本,./xx.sh 12!
思路分析
1>拿到第一個參數(shù)的值12!
2>通過字符串截取拿到12
3>while循環(huán)求乘機
4>輸出成績
b 寫一個shell解析器.解析shell腳本,要考慮到文件是否存在,該文件是否普通文件等各種問題
1>參數(shù)的個數(shù)
2>如果是一個參數(shù)在進行處理
3>判斷文件是否存在
4>判斷該文件是否是普通文件
5>給文件加上執(zhí)行權
6>運行文件
7>讓命令全局有效
mv 33.sh myrun
sudo cp myrun /bin/
excuteFile()
{
file+$1
echo "$file"
chmod +x $file
./$file
}
compareWithSh()
{
file=$1
length=${#file} #整個文件名的長度
let start=length-2
suffix=${file:start:2}
if [ $suffix = "sh" ]
then
echo"1"
else
echo"0"
fi
}
if [ $# -le 0 ]
then
echo "wainng:run what????"
file=ls./
for file in ${files}
do
if [ compareWithSh $file==1 ]
then
printf "$file\t"
fi
done
printf "\n"
printf "select file to excute:"
read exefile
excuteFile $exefile
elif [ $# -eq 1 ]
then
file=$1
if [ -e ./${file} ]
then
if [ -f ./${file} ]
then
if [ compareWithSh $file==1 ]
then
excuteFile $file
else
echo "error:${file}dose have sh suffix"
fi
else
echo "error:${file} is not normal file"
fi
else
echo "warning:${file} does not exsit"
fi
else
echo"error:too much arguments"
fi
**for 循環(huán)
語法
for 變量 in參數(shù)列表
do
循環(huán)體
done
例如
1for value in 1 2 3 4
2do
3 echo "$value"
4done
用法分析: 依次用參數(shù)列表里面的值對變量進行賦值.每次賦值之后,執(zhí)行do和done之間的代碼,直到參數(shù)列表沒有參數(shù)為變量賦值為止
***數(shù)組
1>數(shù)組整體初始化
arr=(1 2 3 4 5)
2>訪問數(shù)組元素
0下標代表都一個袁術
echo "0下標的元素=${arr[0]}"
echo "整個數(shù)組里面的值=${arr[@]}"
echo "整個數(shù)組里面的值${arr=[*]}"
3>數(shù)組單個賦值
arr1[0]=1
arr1[1]="hello"
arr1[2]="c"
echo "arr1=${arr1[@]}"
注意點: 數(shù)組定義為具體下標的元素進行賦值時,可以隔著定義
例如
arr2[1]="hello"
arr2[3]="world"
echo "arr2=${arr2[@]}"
echo "aee2[0]=${arr2[0]}"#該位置的元素沒有定義,默認為空
例題 :自定義一個所欲元素都是整數(shù)的數(shù)組,求你面所有元素的和,用for循環(huán)完成
1arr=(1 2 3 4 5)
2sum=0
3for value in ${arr[ @ ]}
4do
5 let sum+=value
6done
7echo "${sum}"
寫一個命令自動生成當天文件
1>獲取當年當月當日的時間信息
2>用$#去判斷參數(shù)的個數(shù)
3>如果個數(shù)為0 ,創(chuàng)建當年;如果個數(shù)為1 ,判斷參數(shù)是否符合-y,-m,-d.
mv 38.sh myfile
sudo cp myfile /bin/
每天早上過來運行一下 source myfile