當前位置: 妍妍網 > 碼農

周五了,還這樣玩shell指令碼,就沒有見過被裁的~

2024-04-26碼農

關註上方 浩道Linux ,回復 資料 ,即可獲取海量 L inux Python 網路通訊、網路安全 等學習資料!

前言

大家好,這裏是 浩道Linux ,主要給大家分享 L inux P ython 網路通訊、網路安全等 相關的IT知識平台。

周五了,為了讓大家過得更踏實,還是繼續分享運維日常實用shell指令碼吧,我敢說只要你周五還能靜下心寫出這種指令碼,就沒有被裁員的!

文章來源:指令碼綜合整理自網路

1、 使用者許可權檢查指令碼

#!/bin/bash# 檢測本機當前使用者是否為超級管理員,如果是管理員,則使用 yum 安裝 vsftpd,如果不# 是,則提示您非管理員(使用字串對比版本)if [ $USER == "root" ]thenyum ‐y install vsftpdelseecho"您不是管理員,沒有許可權安裝軟體"fi-----------------------------------------------#!/bin/bash# 檢測本機當前使用者是否為超級管理員,如果是管理員,則使用 yum 安裝 vsftpd,如果不# 是,則提示您非管理員(使用 UID 數位對比版本)if [ $UID -eq 0 ];thenyum ‐y install vsftpdelseecho"您不是管理員,沒有許可權安裝軟體"fi

2、 批次建立使用者及密碼指令碼

#!/bin/bash# 編寫指令碼:提示使用者輸入使用者名稱和密碼,指令碼自動建立相應的帳戶及配置密碼。如果使用者# 不輸入帳戶名,則提示必須輸入帳戶名並結束指令碼;如果使用者不輸入密碼,則統一使用默# 認的 123456 作為預設密碼。read -p "請輸入使用者名稱: " user#使用‐z 可以判斷一個變量是否為空,如果為空,提示使用者必須輸入帳戶名,並結束指令碼,結束碼為 2#沒有輸入使用者名稱指令碼結束後,使用$?檢視的返回碼為 2if [ -z $user ];thenecho"您不需輸入帳戶名"exit 2fi#使用 stty ‐echo 關閉 shell 的回顯功能#使用 stty echo 開啟 shell 的回顯功能stty -echoread -p "請輸入密碼: " passstty echopass=${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 existsIMG_DIR=/var/lib/libvirt/imagesBASEVM=rh7_templateread -p "Enter VM number: " VMNUMif [ $VMNUM -le 9 ];thenVMNUM=0$VMNUMfiif [ -z "${VMNUM}" ]; thenecho"You must input a number."exit 65elif [[ ${VMNUM} =~ [a‐z] ]; thenecho"You must input a number."exit 66elif [ ${VMNUM} -lt 1 -o ${VMNUM} -gt 99 ]; thenecho"Input out of range"exit 67fiNEWVM=rh7_node${VMNUM}if [ -e $IMG_DIR/${NEWVM}.img ]; thenecho"File exists."exit 68fiecho -en "Creating Virtual Machine disk image......\t"qemu‐img create -f qcow2 ‐b $IMG_DIR/.${BASEVM}.img $IMG_DIR/${NEWVM}.img &> /dev/nullecho -e "\e[32;1m[OK]\e[0m"#virsh dumpxml ${BASEVM} > /tmp/myvm.xmlcat /var/lib/libvirt/images/.rhel7.xml > /tmp/myvm.xmlsed -i "/<name>${BASEVM}/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xmlsed -i "/uuid/s/<uuid>.*<\/uuid>/<uuid>$(uuidgen)<\/uuid>/" /tmp/myvm.xmlsed -i "/${BASEVM}\.img/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml# 修改 MAC 地址,本例使用的是常量,每位使用該指令碼的使用者需要根據實際情況修改這些值# 最好這裏可以使用便利,這樣更適合於批次操作,可以複制更多虛擬機器sed -i "/mac /s/a1/0c/" /tmp/myvm.xmlecho -en "Defining new virtual machine......\t\t"virsh define /tmp/myvm.xml &> /dev/nullecho -e "\e[32;1m[OK]\e[0m"

    4、 shell排序訓練

    #!/bin/bash# 依次提示使用者輸入 3 個整數,指令碼根據數位大小依次排序輸出 3 個數位read -p "請輸入一個整數:" num1read -p "請輸入一個整數:" num2read -p "請輸入一個整數:" num3# 不管誰大誰小,最後都打印 echo "$num1,$num2,$num3"# num1 中永遠存最小的值,num2 中永遠存中間值,num3 永遠存最大值# 如果輸入的不是這樣的順序,則改變數的儲存順序,如:可以將 num1 和 num2 的值對調tmp=0# 如果 num1 大於 num2,就把 num1 和和 num2 的值對調,確保 num1 變量中存的是最小值if [ $num1 -gt $num2 ];thentmp=$num1num1=$num2num2=$tmpfi# 如果 num1 大於 num3,就把 num1 和 num3 對調,確保 num1 變量中存的是最小值if [ $num1 -gt $num3 ];thentmp=$num1num1=$num3num3=$tmpfi# 如果 num2 大於 num3,就把 num2 和 num3 對標,確保 num2 變量中存的是小一點的值if [ $num2 -gt $num3 ];thentmp=$num2num2=$num3num3=$tmpfiecho"排序後數據(從小到大)為:$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/nullif [ $? -eq 0 ];thenecho"192.168.4.$i is up"elseecho"192.168.4.$i is down"fidone===========================================#!/bin/bash# 編寫指令碼測試 192.168.4.0/24 整個網段中哪些主機處於開機狀態,哪些主機處於關機# 狀態(while 版本)i=1while [ $i -le 254 ]doping ‐c 2 ‐i 0.3 ‐W 1 192.168.4.$i &>/dev/nullif [ $? -eq 0 ];thenecho"192.168.4.$i is up"elseecho"192.168.4.$i is down"filet i++done===============================================#!/bin/bash# 編寫指令碼測試 192.168.4.0/24 整個網段中哪些主機處於開機狀態,哪些主機處於關機# 狀態(多行程版)#定義一個函式,ping 某一台主機,並檢測主機的存活狀態myping(){ping ‐c 2 ‐i 0.3 ‐W 1 $1 &>/dev/nullif [ $? -eq 0 ];thenecho"$1 is up"elseecho"$1 is down"fi}for i in {1..254}domyping 192.168.4.$i &done# 使用&符號,將執行的函式放入後台執行# 這樣做的好處是不需要等待ping第一台主機的回應,就可以繼續並行ping第二台主機,依次類推。

    6、 執行任務進度條顯示

    #!/bin/bash# 編寫指令碼,顯示進度條jindu(){while :doecho -n '#'sleep 0.2done}jindu &cp -a $1$2killall $0echo"拷貝完成"==================================================#!/bin/bash# 進度條,動態時針版本# 定義一個顯示進度的函式,螢幕快速顯示| / ‐ \rotate_line(){INTERVAL=0.5 #設定間隔時間COUNT="0"#設定4個形狀的編號,預設編號為 0(不代表任何影像)while :doCOUNT=`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 重設為 0COUNT="0";;esacdone}rotate_line

    7、 批次修改檔名稱或字尾名指令碼

    #!/bin/bash# 編寫批次修改副檔名指令碼,如批次將 txt 檔修改為 doc 檔# 執行指令碼時,需要給指令碼添加位置參數# 指令碼名 txt doc(可以將 txt 的副檔名修改為 doc)# 指令碼名 doc jpg(可以將 doc 的副檔名修改為 jpg)for i in `ls *.$1`domv $i${i%.*}.$2done

    8、 使用 expect 工具自動互動密碼遠端其他主機安裝 httpd 軟體

    #!/bin/bash# 使用 expect 工具自動互動密碼遠端其他主機安裝 httpd 軟體# 刪除~/.ssh/known_hosts 後,ssh 遠端任何主機都會詢問是否確認要連線該主機rm ‐rf ~/.ssh/known_hostsexpect <<EOFspawn ssh 192.168.4.254expect "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(){clearecho" ##############‐‐‐‐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/nullif [ $? -ne 0 ];thenuseradd -s /sbin/nologin nginxfiif [ -f nginx‐1.8.0.tar.gz ];thentar -xf nginx‐1.8.0.tar.gzcd nginx‐1.8.0yum -y install gcc pcre‐devel openssl‐devel zlib‐devel make./configure ‐‐prefix=/usr/local/nginx ‐‐with‐http_ssl_modulemakemake installln -s /usr/local/nginx/sbin/nginx /usr/sbin/cd ..elseecho"沒有 Nginx 源碼包"fi}install_mysql(){yum -y install gcc gcc‐c++ cmake ncurses‐devel perlid mysql &>/dev/nullif [ $? -ne 0 ];thenuseradd -s /sbin/nologin mysqlfiif [ -f mysql‐5.6.25.tar.gz ];thentar -xf mysql‐5.6.25.tar.gzcd mysql‐5.6.25cmake .makemake 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/mysqlchown -R mysql /usr/local/mysql/data/bin/cp -f /usr/local/mysql/support‐files/mysql.server /etc/init.d/mysqldchmod +x /etc/init.d/mysqld/bin/cp -f /usr/local/mysql/support‐files/my‐default.cnf /etc/my.cnfecho"/usr/local/mysql/lib/" >> /etc/ld.so.confldconfigecho'PATH=\$PATH:/usr/local/mysql/bin/' >> /etc/profileexport PATHelseecho"沒有 mysql 源碼包"exitfi}install_php(){#安裝 php 時沒有指定啟動哪些模組功能,如果的使用者可以根據實際情況自行添加額外功能如‐‐with‐gd 等yum -y install gcc libxml2‐develif [ -f mhash‐0.9.9.9.tar.gz ];thentar -xf mhash‐0.9.9.9.tar.gzcd mhash‐0.9.9.9./configuremakemake installcd ..if [ ! ‐f /usr/lib/libmhash.so ];thenln -s /usr/local/lib/libmhash.so /usr/lib/fildconfigelseecho"沒有 mhash 源碼包檔"exitfiif [ -f libmcrypt‐2.5.8.tar.gz ];thentar -xf libmcrypt‐2.5.8.tar.gzcd libmcrypt‐2.5.8./configuremakemake installcd ..if [ ! -f /usr/lib/libmcrypt.so ];thenln -s /usr/local/lib/libmcrypt.so /usr/lib/fildconfigelseecho"沒有 libmcrypt 源碼包檔"exitfiif [ -f php‐5.4.24.tar.gz ];thentar -xf php‐5.4.24.tar.gzcd 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_configmake && 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.confcd ..elseecho"沒有 php 源碼包檔"exitfi}while :domenuchoicecase$selectin1)install_nginx;;2)install_mysql;;3)install_php;;4)exit;;*)echo Sorry!esacdone

    更多精彩

    關註公眾號 浩道Linux

    浩道Linux ,專註於 Linux系統 的相關知識、 網路通訊 網路安全 Python相關 知識以及涵蓋IT行業相關技能的學習, 理論與實戰結合,真正讓你在學習工作中真正去用到所學。同時也會分享一些面試經驗,助你找到高薪offer,讓我們一起去學習,一起去進步,一起去漲薪!期待您的加入~~~ 關註回復「資料」可 免費獲取學習資料 (含有電子書籍、視訊等)。

    喜歡的話,記得 點「贊」 「在看」