Shell 腳本 100 例《五》

41. 檢測 MySQL 服務是否存活
#!/bin/bash
#Author:丁丁歷險(Jacob)
#host 爲你須要檢測的 MySQL 主機的 IP 地址,user 爲 MySQL 帳戶名,passwd 爲密碼
#這些信息須要根據實際狀況修改後方可以使用
host=127.0.0.1
user=root
passwd=123456
mysqladmin ‐h 127.0.0.1 ‐u root ‐p'$passwd'  ping  &>/dev/null
if  [  $?  ‐eq  0  ];then
       echo  "MySQL is UP"
else
       echo  "MySQL is down"
fi
42. 備份 MySQL 的 shell 腳本(mysqldump 版本)
#!/bin/bash
#Author:丁丁歷險(Jacob)
#定義變量 user(數據庫用戶名),passwd(數據庫密碼),date(備份的時間標籤)
#dbname(須要備份的數據庫名稱,根據實際需求須要修改該變量的值,默認備份 mysql 數據庫)
 
user=root
passwd=123456
dbname=mysql
date=$(date +%Y%m%d)
 
#測試備份目錄是否存在,不存在則自動建立該目錄
[  ! ‐d  /mysqlbackup  ] &&  mkdir  /mysqlbackup
#使用 mysqldump 命令備份數據庫
mysqldump ‐u"$user"  ‐p"$passwd" "$dbname" > /mysqlbackup/"$dbname"‐${date}.sql
 
43. 將文件中全部的小寫字母轉換爲大寫字母
#!/bin/bashhtml

#$1 是位置參數,是你須要轉換大小寫字母的文件名稱
#執行腳本,給定一個文件名做爲參數,腳本就會將該文件中全部的小寫字母轉換爲大寫字母
tr  "[a‐z]"  "[A‐Z]"  < $1
 
44. 非交互自動生成 SSH 密鑰文件
#!/bin/bash
#‐t 指定 SSH 密鑰的算法爲 RSA 算法;‐N 設置密鑰的密碼爲空;‐f 指定生成的密鑰文件存放在哪裏
rm  ‐rf  ~/.ssh/{known_hosts,id_rsa*}
ssh‐keygen ‐t RSA ‐N '' ‐f ~/.ssh/id_rsa
 
45. 檢查特定的軟件包是否已經安裝
#!/bin/bash
#Author:丁丁歷險(Jacob)
if [ $# ‐eq 0 ];then
  echo "你須要制定一個軟件包名稱做爲腳本參數"
  echo "用法:$0 軟件包名稱 ..."
fi
#$@提取全部的位置變量的值,至關於$*
for package in "$@"
do
  if rpm ‐q ${package} &>/dev/null ;then
 
echo ‐e "${package}\033[32m 已經安裝\033[0m"
  else
 
echo ‐e "${package}\033[34;1m 未安裝\033[0m"
  fi
done
 
46. 監控 HTTP 服務器的狀態(測試返回碼)
#!/bin/bash
#Author:丁丁歷險(Jacob)
#設置變量,url 爲你須要檢測的目標網站的網址(IP 或域名)
url=http://192.168.4.5/index.html
 
#定義函數 check_http:
#使用 curl 命令檢查 http 服務器的狀態
#‐m 設置 curl 無論訪問成功或失敗,最大消耗的時間爲 5 秒,5 秒鏈接服務爲相應則視爲沒法鏈接
#‐s 設置靜默鏈接,不顯示鏈接時的鏈接速度、時間消耗等信息
#‐o 將 curl 下載的頁面內容導出到/dev/null(默認會在屏幕顯示頁面內容)
#‐w 設置 curl 命令須要顯示的內容%{http_code},指定 curl 返回服務器的狀態碼
check_http(){
status_code=$(curl ‐m 5 ‐s ‐o /dev/null ‐w %{http_code} $url)
}
 
while :
do
  check_http
  date=$(date +%Y%m%d‐%H:%M:%S) mysql

#生成報警郵件的內容
  echo "當前時間爲:$date
  $url 服務器異常,狀態碼爲${status_code}.
  請儘快排查異常." > /tmp/http$$.pid
 
#指定測試服務器狀態的函數,並根據返回碼決定是發送郵件報警仍是將正常信息寫入日誌
  if [ $status_code ‐ne 200 ];then
 
mail ‐s Warning root < /tmp/http$$.pid
  else
 
echo "$url 鏈接正常" >> /var/log/http.log
  fi
  sleep 5
done
 
47. 自動添加防火牆規則,開啓某些服務或端口(適用於 RHEL7)
#!/bin/bash
#Author:丁丁歷險(Jacob)
#設置變量定義須要添加到防火牆規則的服務和端口號
#使用 firewall‐cmd ‐‐get‐services 能夠查看 firewall 支持哪些服務
service="nfs http ssh"
port="80 22 8080"
 
#循環將每一個服務添加到防火牆規則中
for i in $service
do
  echo "Adding $i service to firewall"
  firewall‐cmd  ‐‐add‐service=${i}
done
 
#循環將每一個端口添加到防火牆規則中
for i in $port
do
  echo "Adding $i Port to firewall"
  firewall‐cmd ‐‐add‐port=${i}/tcp
done
#將以上設置的臨時防火牆規則,轉換爲永久有效的規則(確保重啓後有效)
firewall‐cmd  ‐‐runtime‐to‐permanent
 
48. 使用腳本自動建立邏輯卷
#!/bin/bash
#Author:丁丁歷險(Jacob)
#清屏,顯示警告信息,建立將磁盤轉換爲邏輯卷會刪除數據
clear
echo ‐e "\033[32m           !!!!!!警告(Warning)!!!!!!\033[0m"
echo
echo "+++++++++++++++++++++++++++++++++++++++++++++++++"
echo "腳本會將整個磁盤轉換爲 PV,並刪除磁盤上全部數據!!!"
echo "This Script will destroy all data on the Disk"
echo "+++++++++++++++++++++++++++++++++++++++++++++++++"
echo
read ‐p "請問是否繼續 y/n?:" sure算法

#測試用戶輸入的是否爲 y,若是不是則退出腳本
[ $sure != y ] && exit
 
#提示用戶輸入相關參數(磁盤、卷組名稱等數據),並測試用戶是否輸入了這些值,若是沒有輸入,則腳本退出
read ‐p "請輸入磁盤名稱,如/dev/vdb:" disk
[ ‐z $disk ] && echo "沒有輸入磁盤名稱" && exit
read ‐p "請輸入卷組名稱:" vg_name
[ ‐z $vg_name ] && echo "沒有輸入卷組名稱" && exit
read ‐p "請輸入邏輯卷名稱:" lv_name
[ ‐z $lv_name ] && echo "沒有輸入邏輯卷名稱" && exit
read ‐p "請輸入邏輯卷大小:" lv_size
[ ‐z $lv_size ] && echo "沒有輸入邏輯卷大小" && exit
 
#使用命令建立邏輯卷
pvcreate $disk
vgcreate $vg_name $disk
lvcreate ‐L ${lv_size}M ‐n ${lv_name}  ${vg_name}
 
49. 顯示 CPU 廠商信息
#!/bin/bash
awk '/vendor_id/{print $3}' /proc/cpuinfo |uniq
 
50. 刪除某個目錄下大小爲 0 的文件
#!/bin/bash
#/var/www/html 爲測試目錄,腳本會清空該目錄下全部 0 字節的文件
dir="/var/www/html"
find $dir  ‐type f  ‐size  0  ‐exec  rm   ‐rf {} \;sql

相關文章
相關標籤/搜索