天天看點

Shell 腳本 100 例《一》

1. 編寫 hello world 腳本 

#!/bin/bash

echo "hello world"

2. 通過位置變量建立 Linux 系統賬戶及密碼 

#$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 包版本) 

#使用 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 管理者 

#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 以内的随機數,提示使用者猜數字,根據使用者的輸入,提示使用者猜對了,

猜小了或猜大了,直至使用者猜對腳本結束。 

#RANDOM 為系統自帶的系統變量,值為 0‐32767 的随機數

#使用取餘算法将随機數變為 1‐100 的随機數

num=$[RANDOM%100+1]

#使用 read 提示使用者猜數字

#使用 if 判斷使用者猜數字的大小關系:‐eq(等于),‐ne(不等于),‐gt(大于),‐ge(大于等于),‐lt(小于),‐le(小

于等于)

while  :

      read ‐p  "計算機生成了一個 1‐100 的随機數,你猜: "  cai

      if   [  $cai  ‐eq   $num  ];then

             echo   "恭喜,猜對了"

             exit

      elif  [  $cai   ‐gt   $num  ];then

             echo   "Oops,猜大了"

      else

             echo   "Oops,猜小了"

      fi

7. 檢測本機目前使用者是否為超級管理者,如果是管理者,則使用 yum 安裝 vsftpd,如果不

是,則提示您非管理者(使用字串對比版本) 

if  [  $USER  ==  "root"  ];then

         yum  ‐y  install   vsftpd

else

        echo "您不是管理者,沒有權限安裝軟體"

8. 檢測本機目前使用者是否為超級管理者,如果是管理者,則使用 yum 安裝 vsftpd,如果不

是,則提示您非管理者(使用 UID 數字對比版本)

if  [  $UID  ‐eq  0  ];then

9. 編寫腳本:提示使用者輸入使用者名和密碼,腳本自動建立相應的賬戶及配置密碼。如果使用者

不輸入賬戶名,則提示必須輸入賬戶名并退出腳本;如果使用者不輸入密碼,則統一使用默

認的 123456 作為預設密碼。 

read  ‐p  "請輸入使用者名: "   user

#使用‐z 可以判斷一個變量是否為空,如果為空,提示使用者必須輸入賬戶名,并退出腳本,退出碼為 2

#沒有輸入使用者名腳本退出後,使用$?檢視的傳回碼為 2

if  [   ‐z  $user  ];then

      echo "您不需輸入賬戶名"

      exit 2

#使用 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 個數字 

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

#如果 num1 大于 num3,就把 num1 和 num3 對調,確定 num1 變量中存的是最小值

if [ $num1 ‐gt $num3 ];then   

  num1=$num3

  num3=$tmp

#如果 num2 大于 num3,就把 num2 和 num3 對标,確定 num2 變量中存的是小一點的值

if [ $num2 ‐gt $num3 ];then

  tmp=$num2

  num2=$num3

echo "排序後資料為:$num1,$num2,$num3"

      本文轉自雲計算王森 51CTO部落格,原文連結:http://blog.51cto.com/13426941/2064514,如需轉載請自行聯系原作者