cping() { local i=1 while [ $i -le 245 ];do if ping -W 1 -c 1 $1.$i &>/dev/null;then echo "$1.$i is up" else echo "$1.$i is down" fi let i++ done } #cping 192.168.0 bping() { local j=0 while [ $j -le 255 ];do cping $1.$j let j++ done } #bping 172.16 aping() { local x=0 while [ $x -le 255 ];do bping $1.$x let x++ done } #aping 10
[root@centos7 script35]# vim hostping.sh
#!/bin/bash
[[ "$1" =~ ^(([0-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]] || { echo "please input a IP address" ; exit; }
ping -c1 -w1 $1 &> /dev/null && echo the host is up || echo the host is downhtml
A、[root@centos7 script35]# vim checkdisk.sh
#!/bin/bash
$N=80
DISK=df |egrep "^/dev/sd" | tr -s " " "%" | cut -d% -f5 |sort -nr |head -1
INODE="df -i" | egrep "^/dev/sd" | tr -s " " "%" | cut -d% -f5 | sort -rn |head -1
[[ "$DISK" -gt "$N" ]] && echo "clean up the disk"
[[ "$INODE" -gt "$N" ]] && echo "please clean the file"
B、[root@centos7 script35]# vim checkdisk.sh
#!/bin/bash
WARNING=80
df |grep "^/dev/sd" |while read LINE;do
USED=echo $LINE | sed -rn 's/^([^[:space"]]+).*([0-9]+)%.*/\2/p'
PART=echo $LINE | sed =rn 's/^([^[:space"]]+).*([0-9]+)%.*/\1/p'
if [ $USED -ge $WARNING ];then
echo "$PART will be full, used : $USED"
fi
donenode
一、建立用戶的腳本:(標準版本)
[ ! -f "$1" ] && echo "$1 file is not exit ! " && exit
STUDEN_FILE = $ 1
for USER in cat $STUDEN_FILE
;do
if id ${USER} &> /dev/null;then
echo " 用戶: ${USER}已存在,建立失敗 "
else
useradd ${USER}
echo ${USER} | passwd --stdin ${USER} &> /dev/null
echo "用戶:${USER}建立成功"
fi
done
注:/dev/urandom 本文件可生成隨機字符
二、提示請輸入網址如172.20.119 判斷輸入的網段中主機在線狀態:
NET=172.20.119
START=1
END=254
for HOSTID in seq $START $END
;do
{
if ping -c1 -w1 ${NET}.${HOSTID} &> /dev/null;then
echo ${NET}.${HOSTID} is up
echo ${NET}.${HOSTID} >> hostlist。txt
else
echo ${NET}.${HOSTID} is down
fi
}&
done
wait
三、判斷/var/目錄下全部文件的類型
for i in $(find /var) ;do
if [ -b $i ];then
echo "$i是塊設備"
elif [ -c $i ];then
echo "$i是字符設備"
elif [ -f $i ];then
echo "$i是普通文件"
elif [ -h $i ];then
echo "$i是符號連接文件"
elif [ -p $i ];then
echo "$i是管道文件"
elif [ -s $i ];then
echo "$i是 套接文件"
elif [ -d $i ];then
echo "$i是目錄文件"
else
echo 「文件或目錄不存在」
fi
done
exit 0
四、目錄下分別有多個以K開頭和以S開頭的文件;分別讀取每一個文件, 以K開頭的輸出爲文件加stop,以S開頭的輸出爲文件名加start。
for i in /etc/rc.d/rc3.d/k;do
echo $i stop
done
for i in /etc/rc.d/rc3.d/s;do
echo $i start
done
五、提示輸入正整數n的值,計算1+2+…+n的總和
read -p "please input a positive integer:" n
i=1
sum=0
for i in seq 1 $n
;do
let sum+=i
done
echo "sum is $sum"
六、計算100之內全部能被3整除的整數之和
for n in {1..100};do
if [ $[ $n%3 ] -eq 0 ];then
let sum+=n
fi
done
echo "sum is $sum」
七、打印九九乘法表
for i in {1..9};do
for j in seq 1 $i
;do
result = $[ $j$i ]
echo -e "${j}x${i}=$result\t\c"
done
echo
done
八、在/testdir目錄下建立10個html文件,文件名格式爲數字N(從1到10)加隨機8個字 母,如: 1AbCdeFgH.html
if [ ! -d /testdir ];then
mkdir /testdir
fi
a=1
while [ $a -le 10 ];do
touch /testdir/$a$(tr -cd [:alnum:] < /dev/random |head -c 8).html
a=$(echo $a+1|bc)
done
九、打印等腰三角形
read -p "請輸入須要生成的等腰三角形的行數:" zongline
for curline in $(seq 1 $zongline);do
spacenum=$[$zongline-$curline]
anum=$[2$curline-1]
for kongge in $(seq 1 $spacenum);do
echo -e "" "\c"
done
for a in $(seq 1 $anum);do
echo -e "a\c"
done
echo
done
十、求100之內全部正奇數之和
sum=0
n=1
while [ $n -le 100 ]
do
sum=$((sum+n))
n=$((n+2))
done
echo $sum
十一、提示請輸入網絡地址,如192.168.0.0,判斷輸入的網段中主機 在線狀態,並統計在線和離線主機各多少
read -p "please input nework(eg:192.168.0.0): " network
netid=echo $network|cut -d. -f1-3
hostid=1
up=0
down=0
while [ $hostid -le 254 ];do
if ping -c1 -w1 $netid.$hostid &>/dev/null;then
echo "the $netid.$hostid is up"
let up++
else
echo "the $netid.$hostid is down"
let down++
fi
let hostid++
done
echo the up is $up
echo the down is $down
十二、打印九九乘法表
i=1
while [ $i -le 9 ];do
j=1
while [ $j -le $i ];do
let k=ij
echo -en "$i$j=$k\t"
let j++
done
echo
let i++
done
1三、利用變量RANDOM生成10個隨機數字,輸出這個10數字,並顯 示其中的最大值和最小值
x=0
while [ $x -le 9 ];do
if [ $x -le 9 ];then
echo $RANDOM |tee -a /tmp/suiji.txt
else
break
fi
let x++
done
echo "max num is : $(sort -n /tmp/suiji.txt |tail -1)"
echo "min num is : $(sort -n /tmp/suiji.txt |head -1)"
1四、實現打印國際象棋棋盤
for i in {1..8};do
for j in {1..8};do
if [ $[$i%2] -eq 1 ];then
if [ $[$j%2] -eq 1 ];then
echo -en "\033[47;37m \033[0m"
else
echo -en "\033[40;37m \033[0m"
fi
else
if [ $[$j%2] -eq 1 ];then
echo -en "\033[40;37m \033[0m"
else
echo -en "\033[47;37m \033[0m"
fi
fi
done
echo
done
1五、後續六個字符串: efbaf275cd、 4be9c40b8b、 44b2395c4六、 f8c8873ce0、 b902c16c8b、 ad865d2f63是經過對隨機數變量RANDOM隨機 執行命令: echo $RANDOM|md5sum|cut –c1-10 後的結果,請破解這些 字符串對應的RANDOM值
ps1=efbaf275cd
ps2=4be9c40b8b
ps3=44b2395c46
ps4=f8c8873ce0
ps5=b902c16c8b
ps6=ad865d2f63
echo 'num ' 'random'
time=1
for i in {0..32767}
do
if [ $time -gt 6 ];then
break
fi
ps=$(echo $i | md5sum | cut -c1-10)
for j in $ps1 $ps2 $ps3 $ps4 $ps5 $ps6
do
if [ $ps == $j ];then
echo $i $ps
let time++
fi
done
done
1六、每隔3秒鐘到系統上獲取已經登陸的用戶的信息;若是發現用戶hacker登陸, 則將登陸時間和主機記錄於日誌/var/log/login.log中,並退出腳本
until false;do
if who |grep "^hacker\>" &> /dev/null;then
who|grep "^hacker\>" > /var/log/login.log
break
fi
sleep 3
done
1七、隨機生成10之內的數字,實現猜字遊戲,提示比較大或小,相等則退出
suiji=$[$RANDOM%10]
time=1
while [ $time -le 3 ];do
read -p "請輸入0-9的任意整數:" shuru
if [ $shuru -eq $suiji ];then
echo "猜中了"
break
elif [ $shuru -gt $suiji ];then
echo "請小一點"
echo "您還有$[3-$time]次機會"
let time++
elif [ $shuru -lt $suiji ];then
echo "請大一點"
echo "您還有$[3-$time]次機會"
let time++
fi
done
1八、判斷操做系統的版本號:
OS ( ) {
OS num=sed -r 's/.*([0-9]+)\..*/\1/p' /etc/redhat-release
echo "$OSnum"
}
if [ OS
-eq 5 ];then
echo "OSversion is 5"
elif [ OS
-eq 6 ];then
echo "OSversion is 6"
elif [ OS
-eq 7 ];then
echo "OSversion is 7"
else
echo "unkonwn OS"
filinux
編寫服務 腳本/root/bin/testsrv.sh ,完成以下要求
(1) 腳本可接受參數:start, stop, restart, status
(2) 若是參數非此四者之一,提示使用格式後報錯退出
(3) 如是start則建立/var/lock/subsys/ SCRIPT_NAME , 並顯示「啓動成功」
考慮:若是事先已經啓動過一次,該如何處理?
(4) 如是stop則刪除/var/lock/subsys/ SCRIPT_NAME, 並顯示「中止完成」
考慮:若是事先已然中止過了,該如何處理?
(5) 如是restart ,則先stop, 再start
考慮:若是原本沒有start ,如何處理?
(6) 如是status, 則若是/var/lock/subsys/ SCRIPT_NAME 文件存在,則顯示SCRIPT_NAME is running...
若是/var/lock/subsys/ SCRIPT_NAME 文件不存在,則顯示 SCRIPT_NAME is stopped...
其中: SCRIPT_NAME爲當前腳本名
(7) 在全部模式下禁止啓動該服務,可用chkconfig 和 service
#!/bin/env bash
#chkconfig: 345 99 0
┌───────────────────────────────────────────────────────┐
#│Script Name | testsrv.sh ▮▮▮▮▮▮▮▮ │
│Date | 2017-07-04 ▮▮ │
#│Author | Yu Longjun ▮▮▮▮▮▮▮▮▮▮▮▮ │
│Blog | http://www.yulongnjun.com ▮▮ │
#│Version | 1.0 ▮▮▮▮▮ │
#│Description | This is description. ▮▮ │
└───────────────────────────────────────────────────────┘
srvfile="/var/lock/subsys/basename $0
"
func_start(){
if [ -e $srvfile ];then
echo "服務已啓動,無需再次啓動"
else
touch $srvfile
echo "啓動成功"
fi
}
func_stop(){
if [ -e $srvfile ];then
rm -f $srvfile
echo "中止完成"
else
echo "服務未啓動,無需中止"
fi
}
func_restart(){
func_stop
func_start
}
func_status(){
if [ -e $srvfile ];then
echo "basename $0
is running..."
else
echo "basename $0
has stoped..."
fi
}
case $1 in
"start")
func_start
;;
"stop")
func_stop
;;
"restart")
func_restart
;;
"status")
func_status
;;
*)
"輸入參數錯誤, Usage: basename $0
start|stop|restart|status"
;;
esacvim
編寫腳本/root/bin/copycmd.sh
(1) 提示用戶輸入一個可執行命令名稱
(2) 獲取此命令所依賴到的全部庫文件列表
(3) 複製命令至某目標目錄( 例如/mnt/sysroot) 下的對應路徑下;如:/bin/bash ==> /mnt/sysroot/bin/bash /usr/bin/passwd ==> /mnt/sysroot/usr/bin/passwd
(4) 複製此命令依賴到的全部庫文件至目標目錄下的對應路徑下:/lib64/ld-linux-x86-64.so.2 ==> /mnt/sysroot/lib64/ld-linux-x86-64.so.2
(5) 每次複製完成一個命令後,不要退出,而是提示用戶鍵入新的要複製的命令,並重復完成上述功能;直到用戶輸入quit
#!/bin/bash
#┌───────────────────────────────────────────────────────┐
#│Script Name | copycmd.sh ▮▮▮▮▮▮▮▮ │
#│Date | 2017-07-04 ▮▮ │
#│Author | Yu Longjun ▮▮▮▮▮▮▮▮▮▮▮▮ │
#│Blog | http://www.yulongnjun.com ▮▮ │
#│Version | 1.0 ▮▮▮▮▮ │
#│Description | This is description. ▮▮ │
└───────────────────────────────────────────────────────┘
read -p "請輸入複製路徑:" copy_path
while true;do
read -p "請輸入一個可執行的命令的名稱(quit 退出):" command
if [ "$command" == "quit" ]; then
exit
else
cmd=which $command
cmd_path=dirname $cmd
mkdir -p $copy_path$cmd_path
cp -f $cmd $copy_path$cmd_path
printf "複製 %-30s ====> $copy_path%-30s" $cmd $cmd_path
echo
list=ldd $cmd|grep -o "/lib.* "|tr -d " "
[ -e $copy_path/lib64 -a -e $copy_path/lib ] || mkdir $copy_path/{lib64,lib}
for i in $list;do
cp -f $i $copy_path$i
printf "複製 %-30s ====> $copy_path%-30s" $i $i
echo
done
echo "複製 $cmd 命令完成"
fi
done
怎麼把本身寫的腳本添加到服務裏面,便可以使用service命令來調用
[root@LocalCentOS test]# vim test
#!/bin/bash
#chkconfig: - 90 10
#description: just a test
echo "Hello,$1"centos
[root@LocalCentOS test]# mv test /etc/init.d/
[root@LocalCentOS test]# chmod +x /etc/init.d/test
[root@LocalCentOS test]# chkconfig --add test
[root@LocalCentOS test]# service test start //能夠看到Hello,start表示成功
寫一個腳本,實現批量添加20個用戶,用戶名爲user1-20,密碼爲user後面跟5個隨機字符(即隨機生成密碼)
#!/bin/bash
for i in {1..20}; do
pass=$(tr -dc \~`!@#\$\%\^\&*()-_+\=|\\?\/.\>\,\<a-za-z0-9_ <="" dev="" urandom|head="" -c="" 5)
useradd user${i}
echo $pass | passwd user${i} --stdin
echo "user${i} <=============> $pass" >> ./userlist.out
done
echo 'Sucess,passwd is in userlist.out'
驗證:
#!/bin/bash
for i in {1..20}; do
pass=user$(cat /dev/urandom | head -1 |md5sum|head -c 5)
useradd user${i}
echo $pass | passwd user${i} --stdin
echo "user${i} <=============> $pass" >> ./userlist.out
done
echo 'Sucess,passwd is in userlist.out'api