bash快捷鍵:
Ctrl+a 跳轉至命令行首
Ctrl+u 刪除命令行首至當前光標所在處之前的所有內容
Ctrl+k 刪除當前光標所在處至命令行尾的所有內容
Ctrl+l 清屏
Ctrl+c 中止或取消
Ctrl+z 把當前命令送至後臺
======================================================================
bash編程語句格式:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
for、while、until、if
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
for 變量名 in 列表 ;do
循環體
done
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
while 測試條件;do
循環體
done
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
until 測試條件;do
循環體
done
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if:三種格式
單分支:
if 測試條件;then
選擇分支
fi
雙分支:
if 條件1;then
分支1
else
分支2
fi
多分支:
if 條件1;then
分支1
elif 條件2;then
分支2
elif 條件3;then
分支3
...
else
分支n
fi
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
case 變量引用 in
PATTERN1)
分支1
;;
PATTERN2)
分支2
;;
*)
分支n
;;
esac
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function F_NAME {
函數體
}
F_NAME(){
函數體
}
======================================================================
條件測試:
整型測試:數字之間的大小比較
-gt 大於
-lt 小於
-eq 等於
-ne 不等於
-ge 大於等於
-le 小於等於
字符串測試:字符串大小比較
> 大於
< 小於
== 等於
!= 不等於
=~
-n 不空爲真,爲空爲假
-z 爲空爲真,不空爲假
組合條件測試:在多個條件間實現邏輯運算
-a,&& 與
-o,|| 或
-not,! 非
======================================================================
文件判斷:
-r 目標可讀爲真
-w 目標可寫爲真
-x 目標可執行爲真
-f 目標是文件爲真
-d 目標是目錄爲真
-c 目標爲字符文件爲真
-b 目標爲塊設備爲真
======================================================================
邏輯判斷:
-a 和 and
-o 或 or
! 非
======================================================================
實例:
1.新建10個用戶tuser401-tuser410,並求他們的ID之和;
#!/bin/bash
#
declare -i idsum=0
for i in {401..410}; do
useradd tuser$i
userID=`id -u tuser$i`
let idsum+=$userID
done
echo "ID sum: $idsum."
2.求100以內所有正整數之和;
until方式:
#!/bin/bash
#
declare -i count=1
declare -i sum=0
until [ $count -gt 100 ]; do
let sum+=$count
let count++
done
echo $sum
while方式:
#!/bin/bash
#
declare -i count=1
declare -i sum=0
while [ $count -le 100 ]; do
let sum+=$count
let count++
done
echo $sum
3.提示用戶輸入一個用戶名,如果用戶存在,就顯示用戶的ID號和shell;否則顯示用戶不存在;
顯示完成之後不退出,再次重複前面的操作,直到用戶輸入q或quit爲止;
#!/bin/bash
#
read -p "Plz enter a username: " userName
while [ "$userName" != 'q' -a "$userName" != 'quit' ]; do
if id $userName &> /dev/null; then
grep "^$userName\>" /etc/passwd | cut -d: -f3,7
else
echo "No such user."
fi
read -p "Plz enter a username again: " userName
done
4.服務腳本示例
#!/bin/bash
#
# chkconfig: 2345 67 34
srvName=$(basename $0)
lockFile=/var/lock/subsys/$srvName
start() {
if [ -f $lockFile ];then
echo "$srvName is already running."
return 1
else
touch $lockFile
[ $? -eq 0 ] && echo "Starting $srvName OK."
return 0
fi
}
stop() {
if [ -f $lockFile ];then
rm -f $lockFile &> /dev/null
[ $? -eq 0 ] && echo "Stop $srvName OK" && return 0
else
echo "$srvName is not started."
return 1
fi
}
status() {
if [ -f $lockFile ]; then
echo "$srvName is running."
else
echo "$srvName is stopped."
fi
return 0
}
usage() {
echo "Usage: $srvName {start|stop|restart|status}"
return 0
}
case $1 in
start)
start
;;
stop)
stop ;;
restart)
stop
start ;;
status)
status ;;
*)
usage
exit 1 ;;
esac