1. 程式人生 > >shell實戰訓練營Day20

shell實戰訓練營Day20

編寫一個問候程式,它執行時能根據系統當前的時間向用戶輸出問候資訊。假設從半夜到中午為早晨,中午到下午六點為下午,下午六點到半夜為晚上。

!/bin/bash
d=date +%H
if [ $d -ge 0 -a $d -lt 7 ] # -a 表示並且
then tag=1
elif [ $d -ge 7 -a $d -lt 12 ]
then tag=2
elif [ $d -ge 12 -a $d -lt 18 ]
then tag=3
else
tag=4
fi

case $tag in
1)
echo "zaoshanghao"
;;
2)
echo "shangwuhao"
;;
3)
echo "xiawuhao"
;;
4)
echo "wangshanghao"
;;
*)
echo "error"
;;
esac

寫一個shell指令碼,實現簡單的彈出式選單功能,使用者能根據顯示的選單項從鍵盤選擇執行對應的命令。

#!/bin/bash
PS3="輸入數字(1-3):"
select i in w ls pwd exit
do
case $i in
w)
w
;;
ls)
ls
;;
pwd)
pwd
;;
exit)
exit
;;
*)
echo "輸入數字(1-3):"
;;
esac
done

寫一個shell指令碼,執行中每隔5分鐘檢查指定的使用者是否登入系統,使用者名稱從命令列輸入,如果指定的使用者已經登入,則顯示相關資訊。

#!/bin/bash
#read -p "輸入一個使用者:" c
while :
do
if w|sed '1d'|awk '{print $1}'|grep -qw "$1"
then
echo "$1已經登入"
exit
fi
sleep 30
done

先普及一個小常識,我們用ps aux可以檢視到程序的PID,而每個PID都會在/proc內產生。如果檢視到的pid在proc內是沒有的,則程序被人修改了,這就代表系統很有可能已經被***過了。 請用上面知識編寫一個shell,定期檢查下自己的系統是否被人***過

#!/bin/bash
#read -p "輸入一個使用者:" c
while :
do
if w|sed '1d'|awk '{print $1}'|grep -qw "$1"
then
echo "$1已經登入"
exit
fi
sleep 30
done
[[email protected] shell100]# cat 44.sh
#!/bin/bash
pp=$$ #shell的pid
ps -elf |sed '1d' >/tmp/pid.txt
for pid in awk -v ppn=$pp '$5!=ppn {print $4}' /tmp/pid.txt


do
if ! [ -d /proc/$pid ]
then
echo "系統中沒有pid為$pid的目錄,請檢查"
fi
done

想辦法把文本里面每三行內容合併到一行 例如:1.txt內容

1
2
3
4
5
6
7
處理後應該是

1 2 3
4 5 6
7

#!/bin/bash
n=1
cat $1 |while read line
do
n1=$[$n%3]
if [ $n1 -eq 0 ]
then
echo "$line"
else
echo -n "$line" #不換行輸出
fi
n=$[$n+1]
done