7. if 判斷一些特殊用法
if [ -z $a ] 這個表示當變量a的值爲空時會怎麼樣
if grep -q '123' 1.txt; then 表示若是1.txt中含有'123'的行時會怎麼樣
if [ ! -e file ]; then 表示文件不存在時會怎麼樣
if (($a<1)); then …等同於 if [ $a -lt 1 ]; then… [ ] 中不能使用<,>,==,!=,>=,<=這樣的符號shell
if [ ! $a -gt 0 ];then... 表明不大於0vim
if [ -z $n1 ] 爲空
if [ -n $n1 ] 不爲空
if [ ! -z $n1 ]bash
8. shell中的case判斷
格式: case 變量名 in
value1)
command
;;
value2)
command
;;
*)
commond
;;
esac函數
求餘!!
vim case.sh
!# /bin/bash
n1=`echo $1 |sed 's/[0-9]//g'`
if [ -z $n1 ]; then
m=$[$1%2]
case $m in
1)
echo "the number is odd"
;;
0)
echo "the number is even"
;;
*)
echo "is other"
;;
esac
else
echo "the character you input not a number"
fispa
sh case.sh 6 $1表明第一個參數排序
9. shell腳本中的循環
for循環 語法結構: for 變量名 in 條件; do … done
while 循環語法結構: while 條件; do … done 死循環用:表示
break直接結束本層循環(跳出整個循環); continue忽略continue之下的代碼(跳出本次循環),直接進行下一次循環
exit 直接退出shellinput
序列
seq 1 [步長] 10 默認是1
seq 1 10
seq 10 -1 1
seq 10 -2 1
seq 1 2 10it
seq -w 1 100 寬度同樣 ============
001
002
...
100
===============
vim for.sh
!# /bin/bash
for i in `seq 1 10`
do
echo $i
doneio
==========
vim for.sh
!# /bin/bash
for file in `ls`
do
ls -ld $file
donefor循環
=========
vim for.sh
!# /bin/bash
sum=0
for n in `seq 1 100`
do
sum=$[$sum+$n]
done
echo $sum
==========while死循環
vim while.sh
!# /bin/bash
n1=1 這裏能夠是任意值
while [ ! -z $n1 ]
do
read -p "input a number:" n
n1=`echo $n |sed 's/[0-9]//g'`
done
echo "the number is $n."
===========
vim break.sh
!# /bin/bash
for i in 1 2 3 4 5
do
echo $i
if [ $i -eq 3 ]
then
break
fi
echo $i
done
10. shell中的函數
函數就是把一段代碼整理到了一個小單元中,並給這個小單元起一個名字,當用到這段代碼時直接調用這個小單元的名字便可。
格式: function f_name() {
command
}
函數必需要放在最前面
函數裏能夠export 全局變量
===============
function mysum() {
sum=$[$1+$2]
echo $sum
}
s=`mysum 1 2`
echo $s
===============
function mysum() {
sum=$[$1+$2]
return $sum
}
mysum 1 2
echo $?
=============
function mysum() {
sum=$[$1+$2] 若是在sum前面加local就在函數裏面生效
}
mysum 1 10
echo $sum
===========
11. shell練習題
編寫shell腳本,計算1-100的和;
編寫shell腳本,要求輸入一個數字,而後計算出從1到輸入數字的和,要求,若是輸入的數字小於1,則從新輸入,直到輸入正確的數字爲止;
vim sum.sh
!# /bin/bash
if_nu() {
n1=`echo $1|sed 's/[0-9]//g'`
if [ -z $n1 ]
then
if [ $1 -gt 1 ]; then return 1; else return 0;fi
else
return 0
fi
}
read -p "input a number :" n
if_nu $n
n2=`echo $?`
if [ $n2 -eq 1 ]
then
sum=0
for i in `seq 1 $n`
do
sum=$[$sum+$i]
done
echo $sum
else
echo "the character you input is not number"
fi
編寫shell腳本,把/root/目錄下的全部目錄(只須要一級)拷貝到/tmp/目錄下;
find /root -maxdepth 1 -type d 搜索root下的一級目錄
===========
for d in `ls /root/`; do if [ -d $d ]; then cp -r $d /tmp/;fi; done
for d in `find /root -maxdepth 1 -type d`; do if [ -d $d ]; then cp -r $d /tmp/;fi; done
編寫shell腳本,批量創建用戶user_00, user_01, ... user_100而且全部用戶同屬於users組;
for i in `seq -w 0 99`; do useradd -g users user_$i; done
編寫shell腳本,截取文件test.log中包含關鍵詞 ‘abc’ 的行中的第一列(假設分隔符爲 」:」 ),而後把截取的數字排序(假設第一列爲數字),而後打印出重複次數超過10次的列;
awk -F: '/abc/ {print $1}' test.log |sort |uniq -c |sort -n |awk '$1>10'