1. 程式人生 > >Shell 腳本 100 例《一》

Shell 腳本 100 例《一》

rontab eof vsftpd std 最大 sources mem 永遠 bin

1. 編寫 hello world 腳本
#!/bin/bash
echo "hello world"

2. 通過位置變量創建 Linux 系統賬戶及密碼
#!/bin/bash
#$1 是執行腳本的第一個參數,$2 是執行腳本的第二個參數
useradd "$!"
echo "$2" | passwd ‐‐stdin "$2"

3. 每周 5 使用 tar 命令備份/var/log 下的所有日誌文件
#vim /root/logbak.sh
#編寫備份腳本,備份後的文件名包含日期標簽,防止後面的備份將前面的備份數據覆蓋
#註意 date 命令需要使用反引號括起來,反引號在鍵盤<tab>鍵上面
tar -czf log-`date +%Y%m%d`.tar.gz /var/log

# crontab ‐e #編寫計劃任務,執行備份腳本
00 03 * * 5 /root/logbak.sh

4. 一鍵部署 LNMP(RPM 包版本)
#!/bin/bash
#使用 yum 安裝部署 LNMP,需要提前配置好 yum 源,否則該腳本會失敗
#本腳本使用於 centos7.2 或 RHEL7.2
yum ‐y install httpd
yum ‐y install mariadb mariadb‐devel mariadb‐server
yum ‐y install php php‐mysql

systemctl start httpd mariadb
systemctl enable httpd mariadb

5. 實時監控本機內存和硬盤剩余空間,剩余內存小於 500M、根分區剩余空間小於 1000M
時,發送報警郵件給 root 管理員
#!/bin/bash
#Author:丁丁歷險(Jacob)
#提取根分區剩余空間
disk_size=$(df / |awk '/\//{print $4}')

#提取內存剩余空間

mem_size=$(free |awk '/Mem/{print $4}')
while :
do
#註意內存和磁盤提取的空間大小都是以 Kb 為單位
if [ $disk_size ‐le 512000 ‐a $mem_size ‐le 1024000 ];then
mail ‐s Warning root <<EOF
Insufficient resources,資源不足
EOF
fi
done

6. 腳本生成一個 100 以內的隨機數,提示用戶猜數字,根據用戶的輸入,提示用戶猜對了,
猜小了或猜大了,直至用戶猜對腳本結束。
#!/bin/bash
#Author:丁丁歷險(Jacob)
#RANDOM 為系統自帶的系統變量,值為 0‐32767 的隨機數
#使用取余算法將隨機數變為 1‐100 的隨機數
num=$[RANDOM%100+1]

#使用 read 提示用戶猜數字
#使用 if 判斷用戶猜數字的大小關系:‐eq(等於),‐ne(不等於),‐gt(大於),‐ge(大於等於),‐lt(小於),‐le(小
於等於)
while :
do
read ‐p "計算機生成了一個 1‐100 的隨機數,你猜: " cai
if [ $cai ‐eq $num ];then
echo "恭喜,猜對了"
exit
elif [ $cai ‐gt $num ];then
echo "Oops,猜大了"
else
echo "Oops,猜小了"
fi
done

7. 檢測本機當前用戶是否為超級管理員,如果是管理員,則使用 yum 安裝 vsftpd,如果不
是,則提示您非管理員(使用字串對比版本)
#!/bin/bash
if [ $USER == "root" ];then
yum ‐y install vsftpd
else
echo "您不是管理員,沒有權限安裝軟件"
fi

8. 檢測本機當前用戶是否為超級管理員,如果是管理員,則使用 yum 安裝 vsftpd,如果不
是,則提示您非管理員(使用 UID 數字對比版本)

#!/bin/bash
if [ $UID ‐eq 0 ];then
yum ‐y install vsftpd
else
echo "您不是管理員,沒有權限安裝軟件"
fi

9. 編寫腳本:提示用戶輸入用戶名和密碼,腳本自動創建相應的賬戶及配置密碼。如果用戶
不輸入賬戶名,則提示必須輸入賬戶名並退出腳本;如果用戶不輸入密碼,則統一使用默
認的 123456 作為默認密碼。
#!/bin/bash
read ‐p "請輸入用戶名: " user
#使用‐z 可以判斷一個變量是否為空,如果為空,提示用戶必須輸入賬戶名,並退出腳本,退出碼為 2
#沒有輸入用戶名腳本退出後,使用$?查看的返回碼為 2
if [ ‐z $user ];then
echo "您不需輸入賬戶名"
exit 2
fi
#使用 stty ‐echo 關閉 shell 的回顯功能
#使用 stty echo 打開 shell 的回顯功能
stty ‐echo
read ‐p "請輸入密碼: " pass
stty echo
pass=${pass:‐123456}
useradd "$user"
echo "$pass" | passwd ‐‐stdin "$user"

10. 依次提示用戶輸入 3 個整數,腳本根據數字大小依次排序輸出 3 個數字
#!/bin/bash
read ‐p "請輸入一個整數:" num1
read ‐p "請輸入一個整數:" num2
read ‐p "請輸入一個整數:" num3
#不管誰大誰小,最後都打印 echo "$num1,$num2,$num3"
#num1 中永遠存最小的值,num2 中永遠存中間值,num3 永遠存最大值
#如果輸入的不是這樣的順序,則改變數的存儲順序,如:可以將 num1 和 num2 的值對調
tmp=0
#如果 num1 大於 num2,就把 num1 和和 num2 的值對調,確保 num1 變量中存的是最小值
if [ $num1 ‐gt $num2 ];then


tmp=$num1
num1=$num2
num2=$tmp
fi
#如果 num1 大於 num3,就把 num1 和 num3 對調,確保 num1 變量中存的是最小值
if [ $num1 ‐gt $num3 ];then


tmp=$num1
num1=$num3
num3=$tmp
fi
#如果 num2 大於 num3,就把 num2 和 num3 對標,確保 num2 變量中存的是小一點的值

if [ $num2 ‐gt $num3 ];then
tmp=$num2
num2=$num3
num3=$tmp
fi

echo "排序後數據為:$num1,$num2,$num3"


Shell 腳本 100 例《一》