中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

生產環境中有哪些常用的shell腳本

發布時間:2022-02-17 15:42:32 來源:億速云 閱讀:156 作者:iii 欄目:開發技術

本篇內容主要講解“生產環境中有哪些常用的shell腳本”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“生產環境中有哪些常用的shell腳本”吧!

生產環境中有哪些常用的shell腳本

1、從FTP服務器下載文件

#!/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

2、連續輸入5個100以內的數字,統計和、最小和最大

#!/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"

3、將結果分別賦值給變量

應用場景:希望將執行結果或者位置參數賦值給變量,以便后續使用。

方法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]})

4、批量修改文件名

示例:# 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

5、統計當前目錄中以.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

6、掃描主機端口狀態

#!/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

7、Expect實現SSH免交互執行命令

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

8、批量修改服務器用戶密碼

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

9、打印乘法口訣

方法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

10、getopts工具完善腳本命令行參數

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腳本”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

翁牛特旗| 日喀则市| 石狮市| 梁河县| 奉化市| 阳春市| 合水县| 安顺市| 延津县| 景谷| 黎平县| 南投市| 布拖县| 临朐县| 西平县| 尼勒克县| 海阳市| 台中市| 章丘市| 乌鲁木齐县| 津南区| 武城县| 平利县| 闵行区| 湖北省| 和田市| 崇礼县| 兰溪市| 大石桥市| 莱西市| 岢岚县| 清徐县| 克拉玛依市| 正镶白旗| 阿巴嘎旗| 左云县| 龙陵县| 隆回县| 忻城县| 南城县| 西昌市|