-
while循環
????while循環是不定循環,也稱作條件循環。只要條件判斷式成立,循環就會一直繼續,直到條件判斷式不成立,循環才會停止。這就和for的固定循環不太一樣了。
while[條件判斷式]
????do
????????程序
????done
實例1
#!/bin/bash
#從1加到100
i=1
s=0
while [ $i -le 100 ]
#如果變量i的值小于等于100,則執行循環
????do?
????????s=$(( $s+$i ))
????????i=$(( $i+1 ))
????done?
echo "The sum is:$s"
實例2
#!/bin/bash
#從1加到100
i=1
s=0
while [ $i -gt 100 ]
#如果變量i的值小于等于100,則執行循環
????do?
????????s=$(( $s+$i ))
????????i=$(( $i+1 ))
????done?
echo "The sum is:$s"
查看全部 -
所有shell數值運算都要用(())括起來
批量添加指定數量的用戶實例
#!/bin/bash
#批量添加指定數量的用戶實例
read -t 30 -p "input user name:" name
read -t 30 -p "input password:" pass
read -t 30 -p "input user number:" num
#檢查輸入內容是否為非空
if [ -n "$name" -a -n "$pass" -a -n "$num" ]
? ? ? ? then
#檢查輸入的用戶數量是否為純數字?
? ? ? ? chknum=$( echo "$num" | sed 's/[0-9]//g' )
? ? ? ? if [ -z "$chknum" ]
? ? ? ? ? ? ? ? then
? ? ? ? ? ? ? ? ? ? ? ? for (( i=1;i<="$num";i=i+1 ))
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? do
#添加用戶
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/usr/sbin/useradd $name$i &>/dev/null
#添加用戶密碼,passwd 的--stdin參數是非交互輸入,直接傳入密碼,不需要第二次確認
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? echo $pass | /usr/bin/passwd --stdin $name$i &>/dev/null
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? echo "add $i complete"
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? done
? ? ? ? else
? ? ? ? ? ? ? ? echo "the num must be number"
? ? ? ? fi
else
? ? ? ? echo "input can not be null,please input"
fi
cat /etc/passwd | grep /bin/bash | grep -v /root | cut -d ":" -f 1
批量刪除用戶實例
#!/bin/bash
#批量刪除用戶
user=$(cat /etc/passwd | grep "/bin/bash" | grep -v root | cut -d ":" -f 1)
for i in $user
? ? ? ? do
#刪除用戶,-r參數是刪除用戶家目錄
? ? ? ? ? ? ? ? /usr/sbin/userdel -r $i
? ? ? ? done
查看全部 -
for循環
語法1:
for 變量 in 值1 值2 值3 …
? ? do
? ? ? ? 程序
? ? done
示例1
#!/bin/bash?
for i in 1 2 3 4 5
????do?
????????echo $i
????done
示例2
##!/bin/bash
cd /root/test
ls *.tar.gz > ls.log
for i in $( cat ls.log )
? ? ? ? do??
? ? ? ? ? ? ?tar -czf $i &>/dev/null
#把執行過程中所有輸出信息丟到回收站,不顯示在屏幕上
? ? ? ? done
rm -rf ls.log
查看全部 -
多分支case條件語句
????case語句和if...elif...else語句一樣都是多分支條件語句,不過和if多分支條件語句不同的是,case語句只能判斷一種條件關系,而if語句可以判斷多種條件關系。
case $變量名 in
????"值1")
????????如果變量的值等于值1,則執行程序1
????????;;
????"值2")
????????如果變量的值等于值2,則執行程序2
????????;;
????????…省略其他分支.…
????*)
????????如果變量的值都不是以上的值,則執行此程序
????????;;
esac
????vi case.sh
#!/bin/bash
read -t 30 -p "please input yes/no:" cho?
case "$cho" in
? ? ? ? "yes")
? ? ? ? ? ? echo "yes"
? ? ? ? ? ? ;;??
? ? ? ? "no")
? ? ? ? ? ? echo "no"
? ? ? ? ? ? ;;??
? ? ? ? *)??
? ? ? ? ? ? echo "please input yes/no again!!!"
? ? ? ? ? ? ;;??
esac
查看全部 -
多分支if條件語句
if [ 條件判斷式1 ]
????then
????????條件成立時,執行的程序
elif [ 條件判斷式2 ]
????then
????????條件不成立時,執行另一個程序
else
????當所有條件都不成立時,最后執行的程序
fi
查看全部 -
????vi apache.shujuku #注意文件名不要取httpd
#!/bin/bash?
test=$(ps aux | grep httpd | grep -v grep)
#截取httpd進程,把結果賦給變量test
if [ -n "$test" ] #-n非空,執行then中命令
? ? ? ? then
? ? ? ? ? ? ? ? echo "httpd is open!"
? ? ? ? else
? ? ? ? ? ? ? ? echo "httpd is closed!!"
fi
查看全部 -
meigong chengxu shujuku apache linux fuwuqi yuming IP daikuan www
美工? 程序 數據庫 apache服務 linux 服務器 域名 IP地址? 帶寬 網頁
????www.netcraft.com ????#網頁查看一些服務器數據統計
????ps aux | grep httpd | grep -v grep ????#查詢httpd是否啟動
查看全部 -
雙分支if條件語句
if [ 條件判斷式 ]
???? then
???? ?????條件成立時,執行的程序
???? else
???? ????? 條件不成立時,執行另一個程序
fi
舉例:
????vi if3.sh
#!/bin/bash
read -t 30 -p "Please input a dir:" dir
if [ -d "$dir" ]? #如果輸入的是一個目錄
? ? ? ? then
? ? ? ? ? ? ? ? echo "is a directory"
? ? ? ? else
? ? ? ? ? ? ? ? echo "is not a directory"
fi
查看全部 -
df -h | grep "/dev/sda5" | awk '{print $5}' | cut -d "%" -f 1????
判斷分區使用率
????vi if2.sh
#!/bin/bash
test=$(df -h | grep "/dev/sda5" | awk '{print $5}' | cut -d "%" -f 1)
echo $test ???????? #sda5分區使用率
if [ "$test" -ge "90" ] ???????? #-ge大于等于90
? ? ? ? then
????????????echo "/ is full!根磁盤已滿!"
fi
查看全部 -
單分支if條件語句
if [ 條件判斷式 ];then
????程序
fi
或者
if [ 條件判斷式 ]
????then
????程序
fi
單分支條件語句需要注意幾個點
????if語句使用fi結尾,和一般語言使用大括號結尾不同
????[條件判斷式]就是使用test命令判斷,所以中括號和條件判斷式之間必須有空格
????then后面跟符合條件之后執行的程序,可以放在[]之后,用";"分割。也可以換行寫入,就不需要";"了
判斷登陸的用戶命令
????whoami
????
????env ???? #USER=root
????env | grep USER | cut -d "=" -f 2 ????#篩選USER,以分隔符"="進行分割,提取第二個字段
例子1:判斷登陸的用戶是否root
vi if1.sh
#!/bin/bash?
test=$(env | grep "USER" | cut -d "=" -f 2)
#echo $test
if [ "$test" == root ]
? ? ? ? then
? ? ? ? echo "Current user is root."
fi
查看全部 -
學習小腳本實例的好處:
???? 1、掌握語法結構
???? 2、了解shel的作用
???? 3、分析編程思想
建立編程思想的方法:
???? 1、熟悉Linux基本命令、規范、語法及shell語法
???? 2、當遇到實際需求時,應用所學知識
如何“背”程序?
???? 1、抄寫老師的程序并能正確運行
???? 2、為程序補全注釋
???? 3、刪掉注釋,為代碼重新加注釋
???? 4、看注釋寫代碼
???? 5、刪掉代碼和注釋,從頭開始寫
????
查看全部 -
多重條件判斷?
測試選項 ???????????? ???? 作用
判斷1 -a 判斷2 ???? 邏輯與,判斷1和判斷2都成立,最終的結果才為真
判斷1 -o 判斷2 ???? 邏輯或,判斷1和判斷2有一個成立,最終的結果就為真
! 判斷 ???????????????? 邏輯非,使原始的判斷式取反
舉例:
???? [ "$aa" == "$bb" -a "$aa" -gt 3] && echo "yes" || echo "no"
查看全部 -
字符串的判斷
測試選項 ???????????? 作用
-z 字符串???????? ???? 判斷字符串是否為空(為空返回真)
-n 字符串 ???????? ???? 判斷字符串是否為非空(非空返回真)
字串1 == 字串2 ???? 判斷字符串1是否和字符串2相等(相等返回真)
字串1 != 字串2 ???? 判斷字符串1是否和字符串2不相等(不相等返回真)
舉例:
???? name=fengj
???? [ -z $name ] && echo "yes" || echo "no"
???? name=""
???? [ -z $name ] && echo "yes" || echo "no"
???? aa=11
???? bb=22
???? [ "$aa" == "$bb" ] && echo "yes" || echo "no" ????#判斷兩個變量的值是否相等,明顯不相等,所以返回no
????
????
查看全部 -
兩個整數之間的比較
測試選項 ???????????????? ???? 作用
整數1 -eq 整數2 ???? ???? 判斷整數1是否和整數2相等(相等為真)
整數1 -ne 整數2 ????????? ?判斷整數1是否和整數2不相等(不相等位置)
整數1 -gt 整數2???????????? 判斷整數1是否大于整數2(大于為真)
整數1 -lt 整數2???????????? 判斷整數1是否小于整數2(小于位置)
整數1 -ge 整數2 ???????????? 判斷整數1是否大于等于整數2(大于等于為真)
整數1 -le 整數2 ???????????? 判斷整數1是否小于等于整數2(小于等于為真)
舉例:
????[ 23 -ge 22 ] && echo "yes" || echo "no"?
查看全部 -
兩個文件之間的比較
測試選項 作用
文件1 -nt 文件2 ???? 判斷文件1的修改時間是否比文件2的新(如果新則為真)
文件1 -ot 文件2 ???? 判斷文件1的修改時間是否比文件2的舊(如果舊則為真)
文件1 -ef 文件2 ????判斷文件1是否和文件2的Inode號一致,可以理解為兩個文件是否為同一個文件。這個判斷用于判斷硬鏈接是很好的方法
舉例:
????ln /root/student.txt /tmp/stu
????[ /root/student.txt -ef /tmp/stu ] && echo "yes" || echo "no"
查看全部
舉報