關註上方 浩道Linux ,回復 資料 ,即可獲取海量 L inux 、 Python 、 網路通訊、網路安全 等學習資料!
前言
大家好,這裏是 浩道Linux ,主要給大家分享 L inux 、 P ython 、 網路通訊、網路安全等 相關的IT知識平台。
周五了,為了讓大家過得更踏實,還是繼續分享運維日常實用shell指令碼吧,我敢說只要你周五還能靜下心寫出這種指令碼,就沒有被裁員的!
文章來源:指令碼綜合整理自網路
1、 使用者許可權檢查指令碼
#!/bin/bash
# 檢測本機當前使用者是否為超級管理員,如果是管理員,則使用 yum 安裝 vsftpd,如果不
# 是,則提示您非管理員(使用字串對比版本)
if [ $USER == "root" ]
then
yum ‐y install vsftpd
else
echo"您不是管理員,沒有許可權安裝軟體"
fi
-----------------------------------------------
#!/bin/bash
# 檢測本機當前使用者是否為超級管理員,如果是管理員,則使用 yum 安裝 vsftpd,如果不
# 是,則提示您非管理員(使用 UID 數位對比版本)
if [ $UID -eq 0 ];then
yum ‐y install vsftpd
else
echo"您不是管理員,沒有許可權安裝軟體"
fi
2、 批次建立使用者及密碼指令碼
#!/bin/bash
# 編寫指令碼:提示使用者輸入使用者名稱和密碼,指令碼自動建立相應的帳戶及配置密碼。如果使用者
# 不輸入帳戶名,則提示必須輸入帳戶名並結束指令碼;如果使用者不輸入密碼,則統一使用默
# 認的 123456 作為預設密碼。
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"
3、 KVM虛擬機器一鍵複制指令碼
#!/bin/bash
# 編寫指令碼快速複制 KVM 虛擬機器
# 本指令碼針對 RHEL7.2 或 Centos7.2
# 本指令碼需要提前準備一個 qcow2 格式的虛擬機器樣版,
# 名稱為/var/lib/libvirt/images /.rh7_template 的虛擬機器樣版
# 該指令碼使用 qemu‐img 命令快速建立快照虛擬機器
# 指令碼使用 sed 修改樣版虛擬機器的配置檔,將虛擬機器名稱、UUID、磁盤檔名、MAC 地址
# exit code:
# 65 ‐> user input nothing
# 66 ‐> user input is not a number
# 67 ‐> user input out of range
# 68 ‐> vm disk image exists
IMG_DIR=/var/lib/libvirt/images
BASEVM=rh7_template
read -p "Enter VM number: " VMNUM
if [ $VMNUM -le 9 ];then
VMNUM=0$VMNUM
fi
if [ -z "${VMNUM}" ]; then
echo"You must input a number."
exit 65
elif [[ ${VMNUM} =~ [a‐z] ]; then
echo"You must input a number."
exit 66
elif [ ${VMNUM} -lt 1 -o ${VMNUM} -gt 99 ]; then
echo"Input out of range"
exit 67
fi
NEWVM=rh7_node${VMNUM}
if [ -e $IMG_DIR/${NEWVM}.img ]; then
echo"File exists."
exit 68
fi
echo -en "Creating Virtual Machine disk image......\t"
qemu‐img create -f qcow2 ‐b $IMG_DIR/.${BASEVM}.img $IMG_DIR/${NEWVM}.img &> /dev/null
echo -e "\e[32;1m[OK]\e[0m"
#virsh dumpxml ${BASEVM} > /tmp/myvm.xml
cat /var/lib/libvirt/images/.rhel7.xml > /tmp/myvm.xml
sed -i "/<name>${BASEVM}/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml
sed -i "/uuid/s/<uuid>.*<\/uuid>/<uuid>$(uuidgen)<\/uuid>/" /tmp/myvm.xml
sed -i "/${BASEVM}\.img/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml
# 修改 MAC 地址,本例使用的是常量,每位使用該指令碼的使用者需要根據實際情況修改這些值
# 最好這裏可以使用便利,這樣更適合於批次操作,可以複制更多虛擬機器
sed -i "/mac /s/a1/0c/" /tmp/myvm.xml
echo -en "Defining new virtual machine......\t\t"
virsh define /tmp/myvm.xml &> /dev/null
echo -e "\e[32;1m[OK]\e[0m"
4、 shell排序訓練
#!/bin/bash
# 依次提示使用者輸入 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
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"
5、 測試伺服器網路
#!/bin/bash
# 編寫指令碼測試 192.168.4.0/24 整個網段中哪些主機處於開機狀態,哪些主機處於關機
# 狀態(for 版本)
for i in {1..254}
do
# 每隔0.3秒ping一次,一共ping2次,並以1毫秒為單位設定ping的超時時間
ping ‐c 2 ‐i 0.3 ‐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
===========================================
#!/bin/bash
# 編寫指令碼測試 192.168.4.0/24 整個網段中哪些主機處於開機狀態,哪些主機處於關機
# 狀態(while 版本)
i=1
while [ $i -le 254 ]
do
ping ‐c 2 ‐i 0.3 ‐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
let i++
done
===============================================
#!/bin/bash
# 編寫指令碼測試 192.168.4.0/24 整個網段中哪些主機處於開機狀態,哪些主機處於關機
# 狀態(多行程版)
#定義一個函式,ping 某一台主機,並檢測主機的存活狀態
myping(){
ping ‐c 2 ‐i 0.3 ‐W 1 $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
# 使用&符號,將執行的函式放入後台執行
# 這樣做的好處是不需要等待ping第一台主機的回應,就可以繼續並行ping第二台主機,依次類推。
6、 執行任務進度條顯示
#!/bin/bash
# 編寫指令碼,顯示進度條
jindu(){
while :
do
echo -n '#'
sleep 0.2
done
}
jindu &
cp -a $1$2
killall $0
echo"拷貝完成"
==================================================
#!/bin/bash
# 進度條,動態時針版本
# 定義一個顯示進度的函式,螢幕快速顯示| / ‐ \
rotate_line(){
INTERVAL=0.5 #設定間隔時間
COUNT="0"#設定4個形狀的編號,預設編號為 0(不代表任何影像)
while :
do
COUNT=`expr $COUNT + 1` #執行迴圈,COUNT 每次迴圈加 1,(分別代表4種不同的形狀)
case$COUNTin#判斷 COUNT 的值,值不一樣顯示的形狀就不一樣
"1") #值為 1 顯示‐
echo -e '‐'"\b\c"
sleep $INTERVAL
;;
"2") #值為 2 顯示\\,第一個\是轉義
echo -e '\\'"\b\c"
sleep $INTERVAL
;;
"3") #值為 3 顯示|
echo -e "|\b\c"
sleep $INTERVAL
;;
"4") #值為 4 顯示/
echo -e "/\b\c"
sleep $INTERVAL
;;
*) #值為其他時,將 COUNT 重設為 0
COUNT="0";;
esac
done
}
rotate_line
7、 批次修改檔名稱或字尾名指令碼
#!/bin/bash
# 編寫批次修改副檔名指令碼,如批次將 txt 檔修改為 doc 檔
# 執行指令碼時,需要給指令碼添加位置參數
# 指令碼名 txt doc(可以將 txt 的副檔名修改為 doc)
# 指令碼名 doc jpg(可以將 doc 的副檔名修改為 jpg)
for i in `ls *.$1`
do
mv $i${i%.*}.$2
done
8、 使用 expect 工具自動互動密碼遠端其他主機安裝 httpd 軟體
#!/bin/bash
# 使用 expect 工具自動互動密碼遠端其他主機安裝 httpd 軟體
# 刪除~/.ssh/known_hosts 後,ssh 遠端任何主機都會詢問是否確認要連線該主機
rm ‐rf ~/.ssh/known_hosts
expect <<EOF
spawn ssh 192.168.4.254
expect "yes/no" {send "yes\r"}
# 根據自己的實際情況將密碼修改為真實的密碼字串
expect "password" {send "密碼\r"}
expect "#" {send "yum ‐y install httpd\r"}
expect "#" {send "exit\r"}
EOF
9、 一鍵源碼安裝LNMP
#!/bin/bash
# 一鍵部署 LNMP(源碼安裝版本)
menu()
{
clear
echo" ##############‐‐‐‐Menu‐‐‐‐##############"
echo"# 1. Install Nginx"
echo"# 2. Install MySQL"
echo"# 3. Install PHP"
echo"# 4. Exit Program"
echo" ########################################"
}
choice()
{
read -p "Please choice a menu[1‐9]:" select
}
install_nginx()
{
id nginx &>/dev/null
if [ $? -ne 0 ];then
useradd -s /sbin/nologin nginx
fi
if [ -f nginx‐1.8.0.tar.gz ];then
tar -xf nginx‐1.8.0.tar.gz
cd nginx‐1.8.0
yum -y install gcc pcre‐devel openssl‐devel zlib‐devel make
./configure ‐‐prefix=/usr/local/nginx ‐‐with‐http_ssl_module
make
make install
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
cd ..
else
echo"沒有 Nginx 源碼包"
fi
}
install_mysql()
{
yum -y install gcc gcc‐c++ cmake ncurses‐devel perl
id mysql &>/dev/null
if [ $? -ne 0 ];then
useradd -s /sbin/nologin mysql
fi
if [ -f mysql‐5.6.25.tar.gz ];then
tar -xf mysql‐5.6.25.tar.gz
cd mysql‐5.6.25
cmake .
make
make install
/usr/local/mysql/scripts/mysql_install_db ‐‐user=mysql ‐‐datadir=/usr/local/mysql/data/
‐‐basedir=/usr/local/mysql/
chown -R root.mysql /usr/local/mysql
chown -R mysql /usr/local/mysql/data
/bin/cp -f /usr/local/mysql/support‐files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
/bin/cp -f /usr/local/mysql/support‐files/my‐default.cnf /etc/my.cnf
echo"/usr/local/mysql/lib/" >> /etc/ld.so.conf
ldconfig
echo'PATH=\$PATH:/usr/local/mysql/bin/' >> /etc/profile
export PATH
else
echo"沒有 mysql 源碼包"
exit
fi
}
install_php()
{
#安裝 php 時沒有指定啟動哪些模組功能,如果的使用者可以根據實際情況自行添加額外功能如‐‐with‐gd 等
yum -y install gcc libxml2‐devel
if [ -f mhash‐0.9.9.9.tar.gz ];then
tar -xf mhash‐0.9.9.9.tar.gz
cd mhash‐0.9.9.9
./configure
make
make install
cd ..
if [ ! ‐f /usr/lib/libmhash.so ];then
ln -s /usr/local/lib/libmhash.so /usr/lib/
fi
ldconfig
else
echo"沒有 mhash 源碼包檔"
exit
fi
if [ -f libmcrypt‐2.5.8.tar.gz ];then
tar -xf libmcrypt‐2.5.8.tar.gz
cd libmcrypt‐2.5.8
./configure
make
make install
cd ..
if [ ! -f /usr/lib/libmcrypt.so ];then
ln -s /usr/local/lib/libmcrypt.so /usr/lib/
fi
ldconfig
else
echo"沒有 libmcrypt 源碼包檔"
exit
fi
if [ -f php‐5.4.24.tar.gz ];then
tar -xf php‐5.4.24.tar.gz
cd php‐5.4.24
./configure ‐‐prefix=/usr/local/php5 ‐‐with‐mysql=/usr/local/mysql ‐‐enable‐fpm ‐‐
enable‐mbstring ‐‐with‐mcrypt ‐‐with‐mhash ‐‐with‐config‐file‐path=/usr/local/php5/etc ‐‐with‐
mysqli=/usr/local/mysql/bin/mysql_config
make && make install
/bin/cp -f php.ini‐production /usr/local/php5/etc/php.ini
/bin/cp -f /usr/local/php5/etc/php‐fpm.conf.default /usr/local/php5/etc/php‐fpm.conf
cd ..
else
echo"沒有 php 源碼包檔"
exit
fi
}
while :
do
menu
choice
case$selectin
1)
install_nginx
;;
2)
install_mysql
;;
3)
install_php
;;
4)
exit
;;
*)
echo Sorry!
esac
done
更多精彩
關註公眾號 「 浩道Linux 」
浩道Linux ,專註於 Linux系統 的相關知識、 網路通訊 、 網路安全 、 Python相關 知識以及涵蓋IT行業相關技能的學習, 理論與實戰結合,真正讓你在學習工作中真正去用到所學。同時也會分享一些面試經驗,助你找到高薪offer,讓我們一起去學習,一起去進步,一起去漲薪!期待您的加入~~~ 關註回復「資料」可 免費獲取學習資料 (含有電子書籍、視訊等)。
喜歡的話,記得 點「贊」 和 「在看」 哦