您好,登錄后才能下訂單哦!
本篇內容主要講解“生產環境中有哪些常用的shell腳本”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“生產環境中有哪些常用的shell腳本”吧!
#!/bin/bashif [ $# -ne 1 ]; then echo "Usage: $0 filename"fidir=$(dirname $1) file=$(basename $1) ftp -n -v # -n 自動登錄 open 192.168.1.10 # ftp服務器user admin password binary # 設置ftp傳輸模式為二進制,避免MD5值不同或.tar.gz壓縮包格式錯誤cd $dirget "$file"EOF
#!/bin/bashCOUNT=1 SUM=0 MIN=0 MAX=100while [ $COUNT -le 5 ]; do read -p "請輸入1-10個整數:" INT if [[ ! $INT =~ ^[0-9]+$ ]]; then echo "輸入必須是整數!" exit 1 elif [[ $INT -gt 100 ]]; then echo "輸入必須是100以內!" exit 1 fi SUM=$(($SUM+$INT)) [ $MIN -lt $INT ] && MIN=$INT [ $MAX -gt $INT ] && MAX=$INT let COUNT++doneecho "SUM: $SUM"echo "MIN: $MIN"echo "MAX: $MAX"
應用場景:希望將執行結果或者位置參數賦值給變量,以便后續使用。 方法1:for i in $(echo "4 5 6"); do eval a$i=$idoneecho $a4 $a5 $a6方法2:將位置參數192.168.1.1{1,2}拆分為到每個變量 num=0for i in $(eval echo $*);do #eval將{1,2}分解為1 2 let num+=1 eval node${num}="$i"doneecho $node1 $node2 $node3# bash a.sh 192.168.1.1{1,2}192.168.1.11 192.168.1.12 方法3: arr=(4 5 6) INDEX1=$(echo ${arr[0]}) INDEX2=$(echo ${arr[1]}) INDEX3=$(echo ${arr[2]})
示例:# touch article_{1..3}.html# lsarticle_1.html article_2.html article_3.html 目的:把article改為bbs 方法1:for file in $(ls *html); do mv $file bbs_${file#*_} # mv $file $(echo $file |sed -r 's/.*(_.*)/bbs\1/') # mv $file $(echo $file |echo bbs_$(cut -d_ -f2)done方法2:for file in $(find . -maxdepth 1 -name "*html"); do mv $file bbs_${file#*_}done方法3:# rename article bbs *.html
方法1:# find . -name "*.html" -exec du -k {} \; |awk '{sum+=$1}END{print sum}'方法2:for size in $(ls -l *.html |awk '{print $5}'); do sum=$(($sum+$size))doneecho $sum
#!/bin/bashHOST=$1PORT="22 25 80 8080"for PORT in $PORT; do if echo &>/dev/null > /dev/tcp/$HOST/$PORT; then echo "$PORT open" else echo "$PORT close" fidone
Expect是一個自動交互式應用程序的工具,如telnet,ftp,passwd等。 需先安裝expect軟件包。 方法1:EOF標準輸出作為expect標準輸入#!/bin/bashUSER=root PASS=123.com IP=192.168.1.120 expect set timeout 30 spawn ssh $USER@$IP expect { "(yes/no)" {send "yes\r"; exp_continue} "password:" {send "$PASS\r"} } expect "$USER@*" {send "$1\r"} expect "$USER@*" {send "exit\r"} expect eof EOF 方法2:#!/bin/bashUSER=root PASS=123.com IP=192.168.1.120 expect -c " spawn ssh $USER@$IP expect { \"(yes/no)\" {send \"yes\r\"; exp_continue} \"password:\" {send \"$PASS\r\"; exp_continue} \"$USER@*\" {send \"df -h\r exit\r\"; exp_continue} }"方法3:將expect腳本獨立出來 登錄腳本:# cat login.exp#!/usr/bin/expectset ip [lindex $argv 0]set user [lindex $argv 1]set passwd [lindex $argv 2]set cmd [lindex $argv 3]if { $argc != 4 } { puts "Usage: expect login.exp ip user passwd"exit 1 }set timeout 30 spawn ssh $user@$ipexpect { "(yes/no)" {send "yes\r"; exp_continue} "password:" {send "$passwd\r"} } expect "$user@*" {send "$cmd\r"} expect "$user@*" {send "exit\r"} expect eof 執行命令腳本:寫個循環可以批量操作多臺服務器#!/bin/bashHOST_INFO=user_info.txtfor ip in $(awk '{print $1}' $HOST_INFO)do user=$(awk -v I="$ip" 'I==$1{print $2}' $HOST_INFO) pass=$(awk -v I="$ip" 'I==$1{print $3}' $HOST_INFO) expect login.exp $ip $user $pass $1doneLinux主機SSH連接信息:# cat user_info.txt192.168.1.120 root 123456
Linux主機SSH連接信息:舊密碼# cat old_pass.txt 192.168.18.217 root 123456 22 192.168.18.218 root 123456 22 內容格式:IP User Password Port SSH遠程修改密碼腳本:新密碼隨機生成#!/bin/bashOLD_INFO=old_pass.txt NEW_INFO=new_pass.txtfor IP in $(awk '/^[^#]/{print $1}' $OLD_INFO); do USER=$(awk -v I=$IP 'I==$1{print $2}' $OLD_INFO) PASS=$(awk -v I=$IP 'I==$1{print $3}' $OLD_INFO) PORT=$(awk -v I=$IP 'I==$1{print $4}' $OLD_INFO) NEW_PASS=$(mkpasswd -l 8) # 隨機密碼 echo "$IP $USER $NEW_PASS $PORT" >> $NEW_INFO expect -c " spawn ssh -p$PORT $USER@$IP set timeout 2 expect { \"(yes/no)\" {send \"yes\r\";exp_continue} \"password:\" {send \"$PASS\r\";exp_continue} \"$USER@*\" {send \"echo \'$NEW_PASS\' |passwd --stdin $USER\r exit\r\";exp_continue} }"done生成新密碼文件:# cat new_pass.txt 192.168.18.217 root n8wX3mU% 22 192.168.18.218 root c87;ZnnL 22
方法1:# awk 'BEGIN{for(n=0;n++ 方法2:for ((i=1;ido for ((j=1;jdo result=$(($i*$j)) echo -n "$j*$i=$result " done echodone
getopts是一個解析腳本選項參數的工具。 命令格式:getopts optstring name [arg] 初次使用你要注意這幾點: 腳本位置參數會與optstring中的單個字母逐個匹配,如果匹配到就賦值給name,否則賦值name為問號; optstring中單個字母是一個選項,如果字母后面加冒號,表示該選項后面帶參數,參數值并會賦值給OPTARG變量; optstring中第一個是冒號,表示屏蔽系統錯誤(test.sh: illegal option -- h); 允許把選項放一起,例如-ab 下面寫一個打印文件指定行的簡單例子,引導你思路:#!/bin/bashwhile getopts :f:n: option; do case $option in f) FILE=$OPTARG [ ! -f $FILE ] && echo "$FILE File not exist!" && exit ;; n) sed -n "${OPTARG}p" $FILE ;; ?) echo "Usage: $0 -f -n " echo "-f, --file specified file" echo "-n, --line-number print specified line" exit 1 ;; esacdone
到此,相信大家對“生產環境中有哪些常用的shell腳本”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。