shell腳本練習


1、
通過位置變量創建linux系統賬戶及密碼
$1 是執行腳本的第一個參數,$2 是執行腳本的第二個參數

1#!/bin/bash

2 # Author: wangshilin

3 # Blog: https://home.cnblogs.com/wangshilin/

4 useradd "$!"
5 echo "$2 | passwd --stdin $2 "

2、
每周5使用tar命令備份/var/log 下的所有日志文件,防止文件覆蓋

  1 #!/bin/bash

  2 # Author: wangshilin

  3 # Blog: https://home.cnblogs.com/wangshilin/

  4 # Time: 2019-08-17 01:31:13

  5 tar -czf log -`date +%Y%m%d` .tar.gz /var/log

  6  00 03 * * 5 /root /logbak.sh

3、

實時監控本機內存和硬盤剩余空間,剩余內存小於500M,根分區剩余空間小於1000M的時候發送報警郵件
#!/bin/bash
#3
disk =$(df -h / | awk '/\//{print $4}')
mem=$(df -h / | awk '/\//{print $4}')
if [ $disk -le 512000 -a $mem -le 1024000 ]; then
mail -s Waring root << EOF
echo"Insufficient resources"
exit 0
fi

4、
腳本生成一個 100 以內的隨機數值,提示用戶猜數字,更具用戶的輸入,提示用戶猜對了,猜打了或猜小了,直至用戶猜對腳本結束。

#!/bin/bash
#4
num=$[RANDOM%100+1]
read -p "Please enter a number:" num
if [ $num -eq $num ]; then
echo "You right"
exit
elif [ $num -gt $num ]; then
echo "Oops,You big"
else
echo"Osps You small"
fi


5、
檢測本機當前用戶是否為超級管理員,如果是管理員,使用 yum 安裝 vsftpd,如果不是,則提示您非管理員,使用字串對比版本

#!/bin/bash
#5
if [ $UID -eq 0 ]; then
yum -y install vsftpd
else
echo "You do not administrator"
fi
~

6、
依次提示用戶輸入 3 個整數,腳本根據數字大小依次排序輸出 3 個數字

#!/bin/bash
#
read -p "請輸入一個整數:" num1
read -p "請輸入一個整數:" num2
read -p "請輸入一個整數:" num3
#不管誰大誰小,最后都打印 echo "$num1,$num2,$num3"
#num1 中永遠存最小的值,num2 中永遠存中間值,num3 永遠存最大值

tmp=0
if [ $num1 -gt $num2 ];then
tmp=$num1
num1=$num2
num2=$tmp
fi

if [ $num1 -gt $num3 ];then
tmp=$num1
num1=$num3
num3=$tmp
fi

if [ $num2 -gt $num3 ];then
tmp=$num2
num2=$num3
num3=$tmp
fi
echo "排序后數據為:$num1,$num2,$num3

 

7、
編寫腳本,實現人機《石頭,剪刀,布》游戲

game=(石頭 剪刀 布)
num=$[RANDOM%3]
computer=${game[$num]}#通過隨機數獲取計算機的出拳
#出拳的可能性保存在一個數組中,game[0],game[1],game[2]分別是 3 中不同的可能

echo "請根據下列提示選擇您的出拳手勢"
echo "1.石頭"
echo "2.剪刀"
echo "3.布"
read -p "請選擇 1-3:" person

case $person in

1)
if [ $num -eq 0 ];then
echo "平局"
elif [ $num -eq 1 ];then
echo "你贏"
else
echo "計算機贏"
fi;;

2)
if [ $num -eq 0 ];then
echo "計算機贏"
elif [ $num -eq 1 ];then
echo "平局"
else
echo "你贏"
fi;;


3)
if [ $num -eq 0 ];then
echo "你贏"
elif [ $num -eq 1 ];then
echo "計算機贏"
else
echo "平局"
fi;;
*)
echo "必須輸入 1-3 的數字"
esac
[root@localhost ~]# vim 7.sh
game=(石頭 剪刀 布)
num=$[RANDOM%3]
computer=${game[$num]}#通過隨機數獲取計算機的出拳
#出拳的可能性保存在一個數組中,game[0],game[1],game[2]分別是 3 中不同的可能

echo "請根據下列提示選擇您的出拳手勢"
echo "1.石頭"
echo "2.剪刀"
echo "3.布"
read -p "請選擇 1-3:" person

case $person in

1)
if [ $num -eq 0 ];then
echo "平局"
elif [ $num -eq 1 ];then
echo "你贏"
else
echo "計算機贏"
fi;;

2)
if [ $num -eq 0 ];then
echo "計算機贏"
elif [ $num -eq 1 ];then
echo "平局"
else
echo "你贏"
fi;;


3)
if [ $num -eq 0 ];then
echo "你贏"
elif [ $num -eq 1 ];then
echo "計算機贏"
else
echo "平局"
fi;;
*)
echo "必須輸入 1-3 的數字"
esac


8、
編寫腳本測試192.168.4.0/24整個網段中那些主機處於開機狀態,那些主機處於關機狀態(for 版本)
#!/bin/bash
#
for i in {1..254} do
ping -f 1 -i 0.2 -W 1 192.168.4.$i &>/dev/null
if [ $? –eq 0 ];then
echo "192.168.4.$i is up"
else
echo "192.168.4.$i is down"
fi
done

9、
編寫腳本測試 192.168.4.0/24 整個網段中那些主機處於開機狀態,那些主機處於關機狀態(多進程版),定義一個函數來實現,ping 某一台主機,並檢測主機的存貨狀態

#!/bin/bash
#9
myping(){
ping -c2 -i0.3 -W1 $1 &>/dev/null
if [ $? -eq 0 ];then
echo "$1 is up"
else
echo "$1 is down"
fi
}

for i in {1..254}
do
myping 192.168.4.$i &
done

10、
編寫腳本,復制文件的時候,顯示進度條

i=0
str='#'
ch=('|' '\' '-' '/')
index=0
while [ $i -le 25 ]
do
printf "[%-25s][%d%%][%c]\r" $str $(($i*4)) ${ch[$index]}
str+='#'
let i++
let index=i%4
sleep 0.1
done
printf "\n"


11、9*9 乘法表(編寫 shell 腳本,打印 9*9 乘法表)

#!/bin/bash
for i in `seq 9`
do
for j in `seq $i`
do
echo -n "$i*$j=$[i*j] "
done
echo
done


12、
使用死循環實時顯示 eth0 網卡發送的數據包流量

  1 #!/bin/bash

  2 # Author: wangshilin

  3 # Blog: https://home.cnblogs.com/wangshilin/

  4 # Time: 2019-08-17 01:48:21

  5 while :

  7 do

  9 echo '本地網卡 eth0 流量信息如下: '

 11     ifconfig eno16777736 | grep "RX pack" | awk '{print $5}'

 13     ifconfig eno16777736 | grep "TX pack" | awk '{print $5}'

 15     sleep 1

 17 done

 

1、通過位置變量創建linux系統賬戶及密碼$1 是執行腳本的第一個參數,$2 是執行腳本的第二個參數
#!/bin/bash#1useradd "$!"echo "$2 | passwd --stdin $2    "
2、每周5使用tar命令備份/var/log 下的所有日志文件,防止文件覆蓋tar -czf log -`date +%Y%m%d` .tar.gz /var/log00 03 * * 5 /root /logbak.sh
3、實時監控本機內存和硬盤剩余空間,剩余內存小於500M,根分區剩余空間小於1000M的時候發送報警郵件#!/bin/bash#3disk =$(df -h / | awk '/\//{print $4}')mem=$(df -h / | awk '/\//{print $4}')if [ $disk -le 512000 -a $mem -le 1024000 ]; then        mail -s Waring root << EOF        echo"Insufficient resources"        exit 0fi
4、 腳本生成一個 100 以內的隨機數值,提示用戶猜數字,更具用戶的輸入,提示用戶猜對了,猜打了或猜小了,直至用戶猜對腳本結束。
#!/bin/bash#4num=$[RANDOM%100+1]read -p "Please enter a number:" numif [ $num -eq $num ]; then        echo "You right"        exitelif [ $num -gt $num ]; then        echo "Oops,You big"else        echo"Osps You small"fi

5、檢測本機當前用戶是否為超級管理員,如果是管理員,使用 yum 安裝 vsftpd,如果不是,則提示您非管理員,使用字串對比版本
#!/bin/bash#5if [ $UID -eq 0 ]; then        yum -y install vsftpdelse        echo "You do not administrator"fi~
6、依次提示用戶輸入 3 個整數,腳本根據數字大小依次排序輸出 3 個數字
#!/bin/bash#read -p "請輸入一個整數:" num1read -p "請輸入一個整數:" num2read -p "請輸入一個整數:" num3#不管誰大誰小,最后都打印 echo "$num1,$num2,$num3"#num1 中永遠存最小的值,num2 中永遠存中間值,num3 永遠存最大值
tmp=0if [ $num1 -gt $num2 ];then    tmp=$num1    num1=$num2    num2=$tmpfi
if [ $num1 -gt $num3 ];then    tmp=$num1    num1=$num3    num3=$tmpfi
if [ $num2 -gt $num3 ];then    tmp=$num2    num2=$num3    num3=$tmpfiecho "排序后數據為:$num1,$num2,$num3


7、編寫腳本,實現人機《石頭,剪刀,布》游戲
game=(石頭 剪刀 布)num=$[RANDOM%3]computer=${game[$num]}#通過隨機數獲取計算機的出拳#出拳的可能性保存在一個數組中,game[0],game[1],game[2]分別是 3 中不同的可能
echo "請根據下列提示選擇您的出拳手勢"echo "1.石頭"echo "2.剪刀"echo "3.布"read -p "請選擇 1-3:" person
case $person in
1)if [ $num -eq 0 ];then    echo "平局"elif [ $num -eq 1 ];then    echo "你贏"else    echo "計算機贏"fi;;
2)if [ $num -eq 0 ];then   echo "計算機贏"elif [ $num -eq 1 ];then   echo "平局"else   echo "你贏"fi;;

3)if [ $num -eq 0 ];then   echo "你贏"elif [ $num -eq 1 ];then   echo "計算機贏"else   echo "平局"fi;;*)   echo "必須輸入 1-3 的數字"esac[root@localhost ~]# vim 7.sh game=(石頭 剪刀 布)num=$[RANDOM%3]computer=${game[$num]}#通過隨機數獲取計算機的出拳#出拳的可能性保存在一個數組中,game[0],game[1],game[2]分別是 3 中不同的可能
echo "請根據下列提示選擇您的出拳手勢"echo "1.石頭"echo "2.剪刀"echo "3.布"read -p "請選擇 1-3:" person
case $person in
1)if [ $num -eq 0 ];then    echo "平局"elif [ $num -eq 1 ];then    echo "你贏"else    echo "計算機贏"fi;;
2)if [ $num -eq 0 ];then   echo "計算機贏"elif [ $num -eq 1 ];then   echo "平局"else   echo "你贏"fi;;

3)if [ $num -eq 0 ];then   echo "你贏"elif [ $num -eq 1 ];then   echo "計算機贏"else   echo "平局"fi;;*)   echo "必須輸入 1-3 的數字"esac

8、編寫腳本測試192.168.4.0/24整個網段中那些主機處於開機狀態,那些主機處於關機狀態(for 版本)#!/bin/bash#for i in {1..254} do        ping -f 1 -i 0.2 -W 1 192.168.4.$i &>/dev/null        if [ $? –eq 0 ];then                echo "192.168.4.$i is up"        else                echo "192.168.4.$i is down"        fidone
9、編寫腳本測試 192.168.4.0/24 整個網段中那些主機處於開機狀態,那些主機處於關機狀態(多進程版),定義一個函數來實現,ping 某一台主機,並檢測主機的存貨狀態
#!/bin/bash#9myping(){    ping -c2 -i0.3 -W1 $1 &>/dev/null    if [ $? -eq 0 ];then       echo "$1 is up"    else       echo "$1 is down"    fi}
for i in {1..254}do     myping 192.168.4.$i &done
10、編寫腳本,復制文件的時候,顯示進度條
i=0str='#'ch=('|' '\' '-' '/')index=0while [ $i -le 25 ]do    printf "[%-25s][%d%%][%c]\r" $str $(($i*4)) ${ch[$index]}    str+='#'    let i++    let index=i%4    sleep 0.1doneprintf "\n"

11、9*9 乘法表(編寫 shell 腳本,打印 9*9 乘法表)
#!/bin/bashfor i in `seq 9`do    for j in `seq $i`        do           echo -n "$i*$j=$[i*j] "        done    echodone

12、使用死循環實時顯示 eth0 網卡發送的數據包流量
13、使用user.txt 文件中的人員名單,在計算機中自動創建對應的賬戶並配置初始密碼腳本執行,需要提前准備一個 user.txt 文件,該文件中包含有若干用戶信息

14、編寫批量修改擴展名腳本,如批量將 txt 文件修改為doc文件執行腳本時,需要給腳本添加位置參數腳本名 txt doc (可以將 txt 的擴展名修改為doc)腳本名 doc jpg(可以將doc 的擴展名修改為jpg)
15、查看有多少遠程的 IP 在連接本機(不管是通過 ssh 還是 web 還是 ftp 都統計)使用 netstat -atn 可以查看本機所有連接狀態,-a 查看所有,-t 僅顯示tcp連接信息, -n數字格式顯示local address(第四列是本機的IP和端口信息)Foreign address(第五烈是遠程主機的IP和端口信息)使用awk命令僅顯示第5列數據,再顯示第1列IP地址的信息sort 可以按數字的大小排序,最后使用 Uniq 將多余重復的刪除,並統計重復次數
16、對100 以內的所有正整數相加求和(1+2+3.。。+100)eq 100 可以快速自動生成100個整數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM