1. 程式人生 > >linux--shell編程(三)條件判斷及算術運算

linux--shell編程(三)條件判斷及算術運算

寫一個腳本 head bsp 如何 cut inittab 引用 有用 color

練習:寫一個腳本
判斷當前系統上是否有用戶的默認shell為bash;
如果有,就顯示有多少個這類用戶;否則,就顯示沒有這類用戶;

#!/bin/bash
#
grep \<bash$ /etc/passwd &> /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
USERS=`grep "\<bash$" /etc/passwd | wc -l`
echo "hava $USERS users use default bash"
else
    echo "沒有默認使用bash的用戶"
fi

練習:寫一個腳本
判斷當前系統上是否有用戶的默認shell為bash;
如果有,就顯示其中一個的用戶名;否則,就顯示沒有這類用戶;

#!/bin/bash
#
grep \<bash$ /etc/passwd &> /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
USER=`grep "\<bash$" /etc/passwd | head -1 | cut -d: -f1`
echo "user $USER  use default bash"
else
    echo "沒有默認使用bash的用戶"
fi

練習:寫一個腳本
給定一個文件,比如/etc/inittab
判斷這個文件中是否有空白行;
如果有,則顯示其空白行數;否則,顯示沒有空白行。

#!/bin/bash
grep "^$" /etc/inittab &> /dev/null RETVAL=$? if [ $RETVAT -eq 0 ]; then echo "沒有空白行" else NUM=`grep "^$" /etc/inittab | wc -l` echo "有$NUM空白行"
fi

練習:寫一個腳本
給定一個用戶,判斷其UID與GID是否一樣
如果一樣,就顯示此用戶為“good guy”;否則,就顯示此用戶為“bad guy”。

#!/bin/bash
#
USERNAME="user1"
USERID=`id -u $USERNAME`
GROUPID=`id -g $USERNAME`
if [ USERID -eq GROUPID ]; then echo "good guy" else echo "bad guy" fi
#!/bin/bash
#
USERNAME=user1
USERID=`grep "^$USERNAME\>" /etc/passwd | cut -d: -f3`
GROUPID=`grep "^$USERNAME\>" /etc/passwd | cut -d: -f4`
if [ USERID -eq GROUPID ]; then
echo "good guy"
else 
echo "bad guy"
fi

shell中如何進行算術運算

A=3

B=6

1. let算術表達式

let C=$A+$B

2. $[算術表達式]

C=$[$A+$B]

3. $(())

C=$(($A+$B))

4. expr 算術表達式,表達式中各操作數及運算符之間要有空格,而且要使用命令引用

C=`expr $A + $B`

exit:退出腳本

exit #

錯誤碼可以是1-255,也可以省略

練習:寫一個腳本
給定一個用戶,獲取其密碼警告期限;
而後判斷用戶密碼使用期限是否已經小於警告期限;
提示:計算方法,最長使用期限減去已經使用的天數即為剩余使用期限;

如果小於,則顯示“Warning”;否則,就顯示“OK”。

圓整:丟棄小數點後的所有內容#!/bin/bash#

#!/bin/bash
USER
=root
id -u $USER &> /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then WARNDATE
=`grep "^$USER\>" /etc/shadow | cut -d: -f6` LATESTDATE=`grep "^$USER\>" /etc/shadow | cut -d: -f3` MAXDATE=`grep "^$USER\>" /etc/shadow | cut -d: -f5` MILLS=`date +%s` NOWDATEUSED=`expr $MILLS / 86400` SY=$[$MAXDATE - $[$NOWDATEUSED - LATESTDATE]] if [ $SY -gt $WARNDATE ];then echo "OK" else echo "Warning" fi
else
exit
fi
#!/bin/bash
USER=root
if ! grep "^$USER\>" /etc/shadow; then
    exit 1
fi
WARNDATE=`grep "^$USER\>" /etc/shadow | cut -d: -f6`
LATESTDATE=`grep "^$USER\>" /etc/shadow | cut -d: -f3`
MAXDATE=`grep "^$USER\>" /etc/shadow | cut -d: -f5`
MILLS=`date +%s`
NOWDATEUSED=`expr $MILLS / 86400`
SY=$[$MAXDATE  - $[$NOWDATEUSED - LATESTDATE]]
if [ $SY -gt $WARNDATE ];then
    echo "OK"
else
    echo "Warning"
fi

練習:寫一個腳本
判定命令歷史中歷史命令的總條目是否大於1000;如果大於,則顯示“Some command will gone.”;否則顯示“OK”。

linux--shell編程(三)條件判斷及算術運算