展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 软件教程 > 常见的Linux Shell脚本使用示例

常见的Linux Shell脚本使用示例

Directory Opus 13
Directory Opus 13

Directory Opus 13 是一款功能强大且支持中文的文件管理器,让文件管理变得流畅、简单。在数码荔枝了解价格、购买正版,并获取下载和使用教程。避免使用破解,以获得最佳体验。

¥89
Windows 2026-08-22
正版软件 Windows
立即下载

1、检测两台服务器指定目录下的文件一致性#!/bin/bash######################################检测两台服务器指定目录下的文件一致性######################################通过对比两台服务器上文件的md5值,达到检测一致性的目的dir=/data/webb_ip=192.168.88.10#将指定目录下的文件全部遍历出来并作为md5sum命令的参数,进而得到所有文件的md5值,并写入到指定文件中find$dir-typef|xa

本文目录

    Linux常用Shell脚本有哪些

    1、检测两台服务器指定目录下的文件一致性

    #!/bin/bash
    ######################################
    检测两台服务器指定目录下的文件一致性
    #####################################
    #通过对比两台服务器上文件的md5值,达到检测一致性的目的
    dir=/data/web
    b_ip=192.168.88.10
    #将指定目录下的文件全部遍历出来并作为md5sum命令的参数,进而得到所有文件的md5值,并写入到指定文件中
    find $dir -type f|xargs md5sum > /tmp/md5_a.txt
    ssh $b_ip "find $dir -type f|xargs md5sum > /tmp/md5_b.txt"
    scp $b_ip:/tmp/md5_b.txt /tmp
    #将文件名作为遍历对象进行一一比对
    for f in `awk '{print 2} /tmp/md5_a.txt'`do
    #以a机器为标准,当b机器不存在遍历对象中的文件时直接输出不存在的结果
    if grep -qw "$f" /tmp/md5_b.txt
    then
    md5_a=`grep -w "$f" /tmp/md5_a.txt|awk '{print 1}'`
    md5_b=`grep -w "$f" /tmp/md5_b.txt|awk '{print 1}'`
    #当文件存在时,如果md5值不一致则输出文件改变的结果
    if [ $md5_a != $md5_b ]then
    echo "$f changed."
    fi
    else
    echo "$f deleted."
    fi
    done

    2、定时清空文件内容,定时记录文件大小

    #!/bin/bash
    #################################################################
    每小时执行一次脚本(任务计划),当时间为0点或12点时,将目标目录下的所有文件内#容清空,但不删除文件,其他时间则只统计各个文件的大小,一个文件一行,输出到以时#间和日期命名的文件中,需要考虑目标目录下二级、三级等子目录的文件
    ################################################################
    logfile=/tmp/`date +%H-%F`.log
    n=`date +%H`
    if [ $n -eq 00 ] || [ $n -eq 12 ]
    then
    #通过for循环,以find命令作为遍历条件,将目标目录下的所有文件进行遍历并做相应操作
    for i in `find /data/log/ -type f`
    do
    true > $i
    done
    else
    for i in `find /data/log/ -type f`
    do
    du -sh $i >> $logfile
    done
    fi

    3、检测网卡流量,并按规定格式记录在日志中

    #!/bin/bash
    #######################################################
    #检测网卡流量,并按规定格式记录在日志中#规定一分钟记录一次
    #日志格式如下所示:
    #2019-08-12 20:40
    #ens33 input: 1234bps
    #ens33 output: 1235bps
    ######################################################3
    while :
    do
    #设置语言为英文,保障输出结果是英文,否则会出现bug
    LANG=en
    logfile=/tmp/`date +%d`.log
    #将下面执行的命令结果输出重定向到logfile日志中
    exec >> $logfile
    date +"%F %H:%M"
    #sar命令统计的流量单位为kb/s,日志格式为bps,因此要*1000*8
    sar -n DEV 1 59|grep Average|grep ens33|awk '{print $2,"t","input:","t",$5*1000*8,"bps","n",$2,"t","output:","t",$6*1000*8,"bps"}'
    echo "####################"
    #因为执行sar命令需要59秒,因此不需要sleep
    done

    4、计算文档每行出现的数字个数,并计算整个文档的数字总数

    #!/bin/bash
    #########################################################
    #计算文档每行出现的数字个数,并计算整个文档的数字总数
    ########################################################
    #使用awk只输出文档行数(截取第一段)
    n=`wc -l a.txt|awk '{print $1}'`
    sum=0
    #文档中每一行可能存在空格,因此不能直接用文档内容进行遍历
    for i in `seq 1 $n`do
    #输出的行用变量表示时,需要用双引号
    line=`sed -n "$i"p a.txt`#wc -L选项,统计最长行的长度
    n_n=`echo $line|sed s'/[^0-9]//'g|wc -L`
    echo $n_nsum=$[$sum+$n_n]
    done
    echo "sum:$sum"

    杀死所有脚本

    #!/bin/bash
    ################################################################
    #有一些脚本加入到了cron之中,存在脚本尚未运行完毕又有新任务需要执行的情况,
    #导致系统负载升高,因此可通过编写脚本,筛选出影响负载的进程一次性全部杀死。
    ################################################################
    ps aux|grep 指定进程名|grep -v grep|awk '{print $2}'|xargs kill -9

    5、从 FTP 服务器下载文件

    #!/bin/bash
    if [ $# -ne 1 ]; then
    echo "Usage: $0 filename"
    fi
    dir=$(dirname $1)
    file=$(basename $1)
    ftp -n -v << EOF # -n 自动登录
    open 192.168.1.10# ftp服务器
    user admin password
    binary # 设置ftp传输模式为二进制,避免MD5值不同或.tar.gz压缩包格式错误
    cd $dir
    get "$file"
    EOF

    6、连续输入5个100以内的数字,统计和、最小和最大

    #!/bin/bash
    COUNT=1
    SUM=0
    MIN=0
    MAX=100
    while [ $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++
    done
    echo "SUM: $SUM"
    echo "MIN: $MIN"
    echo "MAX: $MAX

    用户猜数字

    #!/bin/bash# 脚本生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了,
    # 猜小了或猜大了,直至用户猜对脚本结束。
    # RANDOM 为系统自带的系统变量,值为 0‐32767的随机数
    # 使用取余算法将随机数变为 1‐100 的随机数num=$[RANDOM%100+1]echo "$num" 
    # 使用 read 提示用户猜数字
    # 使用 if 判断用户猜数字的大小关系:‐eq(等于),‐ne(不等于),‐gt(大于),‐ge(大于等于),
    # ‐lt(小于),‐le(小于等于)
    
    while :
    do 
    read -p "计算机生成了一个 1‐100 的随机数,你猜: " cai
    if [ $cai -eq $num ]
    then
    echo "恭喜,猜对了" 
    exit
    elif [ $cai -gt $num ] 
    then
    echo "Oops,猜大了" 
    else
    echo "Oops,猜小了" 
    fi
    done

    7、监测 Nginx 访问日志 502 情况,并做相应动作

    假设服务器环境为 lnmp,近期访问经常出现 502 现象,且 502 错误在重启 php-fpm 服务后消失,因此需要编写监控脚本,一旦出现 502,则自动重启 php-fpm 服务。

    #场景:
    #1.访问日志文件的路径:/data/log/access.log
    #2.脚本死循环,每10秒检测一次,10秒的日志条数为300条,出现502的比例不低于10%(30条)则需要重启php-fpm服务
    #3.重启命令为:/etc/init.d/php-fpm restart
    #!/bin/bash
    ###########################################################
    #监测Nginx访问日志502情况,并做相应动作
    ###########################################################
    log=/data/log/access.log
    N=30 #设定阈值
    while :do
     #查看访问日志的最新300条,并统计502的次数
    err=`tail -n 300 $log |grep -c '502" '` 
    if [ $err -ge $N ] 
    then
    /etc/init.d/php-fpm restart 2> /dev/null 
    #设定60s延迟防止脚本bug导致无限重启php-fpm服务
     sleep 60
     fi
     sleep 10
     done

    8、将结果分别赋值给变量

    应用场景:希望将执行结果或者位置参数赋值给变量,以便后续使用。

    方法1:

    for i in $(echo "4 5 6"); do
     eval a$i=$idone
    echo $a4 $a5 $a6

    方法2:将位置参数192.168.1.1{1,2}拆分为到每个变量

    num=0
    for i in $(eval echo $*);do #eval将{1,2}分解为1 2
     let num+=1
     eval node${num}="$i"
    done
    echo $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]})

    9、批量修改文件名

    示例:

    # touch article_{1..3}.html
    # lsarticle_1.htmlarticle_2.htmlarticle_3.html
    目的:把article改为bbs

    方法1:

    for file in $(ls *html); do
    mv $file bbs_${file#*_}
    # mv $file $(echo $file |sed -r 's/.*(_.*)/bbs1/')
    # mv $file $(echo $file |echo bbs_$(cut -d_ -f2)

    方法2:

    for file in $(find . -maxdepth 1 -name "*html"); do
     mv $file bbs_${file#*_}done 

    方法3:

    # rename article bbs *.html
    把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母
    
    1)准备测试文件,文件名为2.txt
    
    第1行1234567不包含字母
    第2行56789BBBBBB
    第3行67890CCCCCCCC
    第4行78asdfDDDDDDDDD
    第5行123456EEEEEEEE
    第6行1234567ASDF
    第7行56789ASDF
    第8行67890ASDF
    第9行78asdfADSF
    第10行123456AAAA
    第11行67890ASDF
    第12行78asdfADSF
    第13行123456AAAA

    2)脚本如下:

    #!/bin/bash
    ###############################################################
    把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母
    ##############################################################
    sed -n '1,5'p 2.txt |sed '/[a-zA-Z]/'d
    sed -n '6,10'p 2.txt |sed s'/[a-zA-Z]//'g
    sed -n '11,$'p 2.txt
    #最终结果只是在屏幕上打印结果,如果想直接更改文件,可将输出结果写入临时文件中,再替换2.txt或者使用-i选项

    10、统计当前目录中以.html结尾的文件总大

    方法1:

    # find . -name "*.html" -exec du -k {} ; |awk '{sum+=$1}END{print sum}'
    
    方法2:
    ```bash
    for size in $(ls -l *.html |awk '{print $5}'); do
    sum=$(($sum+$size))
    done
    echo $sum

    11、扫描主机端口状态

    #!/bin/bash
    HOST=$1
    PORT="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"
    fi
    done
    用 shell 打印示例语句中字母数小于6的单词
    
    #示例语句:
    #Bash also interprets a number of multi-character options.
    #!/bin/bash
    ##############################################################
    #shell打印示例语句中字母数小于6的单词
    ##############################################################
    for s in Bash also interprets a number of multi-character options.
    do
     n=`echo $s|wc -c` 
     if [ $n -lt 6 ] 
     then
     echo $s
     fi
    done

    12、输入数字运行相应命令

    #!/bin/bash
    ##############################################################
    #输入数字运行相应命令
    ##############################################################
    echo "*cmd menu* 1-date 2-ls 3-who 4-pwd 0-exit "
    while :
    do
    #捕获用户键入值
     read -p "please input number :" n
     n1=`echo $n|sed s'/[0-9]//'g`
    #空输入检测 
     if [ -z "$n" ]
     then
     continue
     fi
    #非数字输入检测 
     if [ -n "$n1" ]
     then
     exit 0
     fi
     break
    done
    case $n in
     1)
     date
     ;;
     2)
     ls
     ;;
     3)
     who
     ;;
     4)
     pwd
     ;;
     0)
     break
     ;;
    #输入数字非1-4的提示
     *)
     echo "please input number is [1-4]"
    esac

    13、Expect 实现 SSH 免交互执行命令

    Expect是一个自动交互式应用程序的工具,如telnet,ftp,passwd等。

    需先安装expect软件包。

    方法1:EOF标准输出作为expect标准输入

    #!/bin/bash
    USER=root
    PASS=123.com
    IP=192.168.1.120
    expect << EOFset timeout 30spawn ssh $USER@$IP expect {"(yes/no)" {send "yesr"; exp_continue}"password:" {send "$PASSr"}
    }
    expect "$USER@*"{send "$1r"}
    expect "$USER@*"{send "exitr"}
    expect eof
    EOF

    方法2:

    #!/bin/bash
    USER=root
    PASS=123.com
    IP=192.168.1.120
    expect -c "
    spawn ssh $USER@$IP
    expect {
    "(yes/no)" {send "yesr"; exp_continue}
    "password:" {send "$PASSr"; exp_continue}
    "$USER@*" {send "df -hr exitr"; exp_continue}
    }"

    方法3:将expect脚本独立出来

    登录脚本:
    # cat login.exp
    #!/usr/bin/expect
    set 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@$ip
    expect {
    "(yes/no)" {send "yesr"; exp_continue}
    "password:" {send "$passwdr"}
    }
    expect "$user@*"{send "$cmdr"}
    expect "$user@*"{send "exitr"}
    expect eof

    执行命令脚本:写个循环可以批量操作多台服务器

    #!/bin/bash
    HOST_INFO=user_info.txt
    for 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 $1
    done
    Linux主机SSH连接信息:
    # cat user_info.txt
    192.168.1.120 root 123456
    创建10个用户,并分别设置密码,密码要求10位且包含大小写字母以及数字,最后需要把每个用户的密码存在指定文件中
    ```bash
    #!/bin/bash
    ##############################################################
    #创建10个用户,并分别设置密码,密码要求10位且包含大小写字母以及数字
    #最后需要把每个用户的密码存在指定文件中#前提条件:安装mkpasswd命令
    ##############################################################
    #生成10个用户的序列(00-09)
    for u in `seq -w 0 09`do
     #创建用户
     useradd user_$u
     #生成密码
     p=`mkpasswd -s 0 -l 10` 
     #从标准输入中读取密码进行修改(不安全)
     echo $p|passwd --stdin user_$u
     #常规修改密码
     echo -e "$pn$p"|passwd user_$u
     #将创建的用户及对应的密码记录到日志文件中
     echo "user_$u $p" >> /tmp/userpassworddone

    14、监控 httpd 的进程数,根据监控情况做相应处理

    #!/bin/bash
    ###############################################################################################################################
    #需求:
    #1.每隔10s监控httpd的进程数,若进程数大于等于500,则自动重启Apache服务,并检测服务是否重启成功
    #2.若未成功则需要再次启动,若重启5次依旧没有成功,则向管理员发送告警邮件,并退出检测
    #3.如果启动成功,则等待1分钟后再次检测httpd进程数,若进程数正常,则恢复正常检测(10s一次),否则放弃重启并向管理员发送告警邮件,并退出检测
    ###############################################################################################################################
    #计数器函数
    check_service()
    {
     j=0
     for i in `seq 1 5` 
     do
     #重启Apache的命令
     /usr/local/apache2/bin/apachectl restart 2> /var/log/httpderr.log
    #判断服务是否重启成功
     if [ $? -eq 0 ] then
     break
     else
     j=$[$j+1] fi
    #判断服务是否已尝试重启5次
     if [ $j -eq 5 ] then
     mail.py exit
     fi
     done }while :do
     n=`pgrep -l httpd|wc -l` 
     #判断httpd服务进程数是否超过500
     if [ $n -gt 500 ] then
     /usr/local/apache2/bin/apachectl restart 
     if [ $? -ne 0 ] 
     then
     check_service 
     else
     sleep 60
     n2=`pgrep -l httpd|wc -l` 
     #判断重启后是否依旧超过500
     if [ $n2 -gt 500 ] 
     then 
     mail.py exit
     fi
     fi
     fi
     #每隔10s检测一次
     sleep 10done

    15、批量修改服务器用户密码

    Linux主机SSH连接信息:旧密码

    # cat old_pass.txt 
    192.168.18.217root123456 22
    192.168.18.218root123456 22
    内容格式:IP User Password Port
    
    SSH远程修改密码脚本:新密码随机生成
    https://www.linuxprobe.com/books
    #!/bin/bash
    OLD_INFO=old_pass.txt
    NEW_INFO=new_pass.txt
    for 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 "yesr";exp_continue}
    "password:" {send "$PASSr";exp_continue}
    "$USER@*" {send "echo '$NEW_PASS' |passwd --stdin $USERr exitr";exp_continue}
    }"
    done
    生成新密码文件:
    
    # cat new_pass.txt 
    192.168.18.217rootn8wX3mU%22
    192.168.18.218rootc87;ZnnL22

    16、iptables 自动屏蔽访问网站频繁的IP

    场景:恶意访问,安全防范

    1)屏蔽每分钟访问超过200的IP

    方法1:根据访问日志(Nginx为例)

    #!/bin/bash
    DATE=$(date +%d/%b/%Y:%H:%M)
    ABNORMAL_IP=$(tail -n5000 access.log |grep $DATE |awk '{a[$1]++}END{for(i in a)if(a[i]>100)print i}')
    #先tail防止文件过大,读取慢,数字可调整每分钟最大的访问量。awk不能直接过滤日志,因为包含特殊字符。
    for IP in $ABNORMAL_IP; do
    if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then
    iptables -I INPUT -s $IP -j DROPfidone

    方法2:通过TCP建立的连接

    #!/bin/bash
    ABNORMAL_IP=$(netstat -an |awk '$4~/:80$/ && $6~/ESTABLISHED/{gsub(/:[0-9]+/,"",$5);{a[$5]++}}END{for(i in a)if(a[i]>100)print i}')
    #gsub是将第五列(客户端IP)的冒号和端口去掉
    for IP in $ABNORMAL_IP; do
    if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then
    iptables -I INPUT -s $IP -j DROP
    fi
    done

    2)屏蔽每分钟SSH尝试登录超过10次的IP

    方法1:通过lastb获取登录状态:

    #!/bin/bash
    DATE=$(date +"%a %b %e %H:%M") #星期月天时分%e单数字时显示7,而%d显示07
    ABNORMAL_IP=$(lastb |grep "$DATE" |awk '{a[$3]++}END{for(i in a)if(a[i]>10)print i}')for IP in $ABNORMAL_IP; do
    if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then
    iptables -I INPUT -s $IP -j DROPfidone

    方法2:通过日志获取登录状态

    #!/bin/bash
    DATE=$(date +"%b %d %H")
    ABNORMAL_IP="$(tail -n10000 /var/log/auth.log |grep "$DATE" |awk '/Failed/{a[$(NF-3)]++}END{for(i in a)if(a[i]>5)print i}')"
    for IP in $ABNORMAL_IP; do
    if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then
    iptables -A INPUT -s $IP -j DROP
    echo "$(date +"%F %T") - iptables -A INPUT -s $IP -j DROP" >>~/ssh-login-limit.log
    fi
    done

    17、根据web访问日志,封禁请求量异常的IP,如IP在半小时后恢复正常,则解除封禁

    #!/bin/bash
    ####################################################################################
    #根据web访问日志,封禁请求量异常的IP,如IP在半小时后恢复正常,则解除封禁
    ####################################################################################
    logfile=/data/log/access.log
    #显示一分钟前的小时和分钟
    d1=`date -d "-1 minute" +%H%M`
    d2=`date +%M`
    ipt=/sbin/iptables
    ips=/tmp/ips.txt
    block()
    { 
    #将一分钟前的日志全部过滤出来并提取IP以及统计访问次数
     grep '$d1:' $logfile|awk '{print $1}'|sort -n|uniq -c|sort -n > $ips
     #利用for循环将次数超过100的IP依次遍历出来并予以封禁
     for i in `awk '$1>100 {print $2}' $ips` 
     do
     $ipt -I INPUT -p tcp --dport 80 -s $i -j REJECT 
     echo "`date +%F-%T` $i" >> /tmp/badip.log 
     done
    }
    unblock()
    { 
    #将封禁后所产生的pkts数量小于10的IP依次遍历予以解封
     for a in `$ipt -nvL INPUT --line-numbers |grep '0.0.0.0/0'|awk '$2<10 {print $1}'|sort -nr` 
     do 
     $ipt -D INPUT $a
     done
     $ipt -Z
    }
    #当时间在00分以及30分时执行解封函数
    if [ $d2 -eq "00" ] || [ $d2 -eq "30" ] 
     then
     #要先解再封,因为刚刚封禁时产生的pkts数量很少
     unblock
     block 
     else
     block
    fi

    18、判断用户输入的是否为IP地址

    方法1:

    #!/bin/bash
    function check_ip(){
    IP=$1
    VALID_CHECK=$(echo $IP|awk -F. '$1< =255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
    if echo $IP|grep -E "^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$">/dev/null; then
    if [ $VALID_CHECK == "yes" ]; then
    echo "$IP available."
    else
    echo "$IP not available!"
    fi
    else
    echo "Format error!"
    fi
    }
    check_ip 192.168.1.1
    check_ip 256.1.1.1

    方法2:

    #!/bin/bash
    function check_ip(){
    IP=$1
    if [[ $IP =~ ^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$ ]]; then
    FIELD1=$(echo $IP|cut -d. -f1)
    FIELD2=$(echo $IP|cut -d. -f2)
    FIELD3=$(echo $IP|cut -d. -f3)
    FIELD4=$(echo $IP|cut -d. -f4)
    if [ $FIELD1 -le 255 -a $FIELD2 -le 255 -a $FIELD3 -le 255 -a $FIELD4 -le 255 ]; then
    echo "$IP available."
    else
    echo "$IP not available!"
    fi
    else
    echo "Format error!"
    fi
    }
    check_ip 192.168.1.1
    check_ip 256.1.1.1

    增加版:

    加个死循环,如果IP可用就退出,不可用提示继续输入,并使用awk判断。

    #!/bin/bash
    function check_ip(){
    local IP=$1
    VALID_CHECK=$(echo $IP|awk -F. '$1< =255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
    if echo $IP|grep -E "^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$" >/dev/null; then
    if [ $VALID_CHECK == "yes" ]; then
    return 0
    else
    echo "$IP not available!"
    return 1
    fi
    else
    echo "Format error! Please input again."
    return 1
    fi
    }
    while true; do
    read -p "Please enter IP: " IP
    check_ip $IP
    [ $? -eq 0 ] && break || continue
    done
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    软件教程
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    Postman macOS版
    Postman macOS版

    Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。

    Docker Desktop macOS版
    Docker Desktop macOS版

    Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

    Android Studio macOS版
    Android Studio macOS版

    Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。

    Xcode macOS版
    Xcode macOS版

    Xcode 是苹果面向 Mac 提供的官方集成开发环境,将代码编辑、项目构建、SwiftUI 实时预览、设备模拟、自动化测试、断点调试、性能分析和应用分发整合在同一套工作流中,适合开发与维护 iPhone、iPad、Mac、Apple Wa

    JetBrains WebStorm macOS版
    JetBrains WebStorm macOS版

    JetBrains WebStorm 是面向 JavaScript、TypeScript 和现代 Web 技术的专业集成开发环境,可智能理解项目结构,提供代码补全、重构、错误检查、运行调试、测试及 Git 工具。

    PhpStorm macOS版
    PhpStorm macOS版

    PhpStorm 是 JetBrains 推出的专业 PHP 集成开发环境,可在 Mac 上完成代码编写、智能检查、重构、调试、测试和数据库管理。它支持主流 PHP 框架、Composer、Git、Docker 与远程解释器。

    JetBrains PyCharm macOS版
    JetBrains PyCharm macOS版

    JetBrains PyCharm 是面向 Python 开发者的集成开发环境,提供智能补全、代码检查、重构、调试、测试、版本控制及虚拟环境管理功能。Mac 版兼容 Intel 与 Apple 芯片,核心功能可免费使用。

    JetBrains IntelliJ IDEA macOS版
    JetBrains IntelliJ IDEA macOS版

    IntelliJ IDEA 是 JetBrains 推出的专业集成开发环境,重点服务于 Java、Kotlin 与 JVM 项目开发。软件集成代码补全、静态检查、重构、调试、测试、版本控制及构建工具,并可借助插件扩展语言和框架支持。

    Visual Studio Code macOS版
    Visual Studio Code macOS版

    Visual Studio Code 是微软提供的免费代码编辑器,支持 macOS,并为 Intel 与 Apple 芯片 Mac 提供适配版本。软件集代码编辑、调试、Git 源代码管理、集成终端和扩展市场于一体。

    REAPER macOS版
    REAPER macOS版

    REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。

    Adobe Audition macOS版
    Adobe Audition macOS版

    Adobe Audition 是面向播客、影视后期、音乐制作及内容创作者的专业音频工作站,提供波形精修、多轨录制与混音、频谱编辑、降噪修复、响度匹配和效果处理工具,并可与 Adobe Premiere 协同完成视频声音制作。

    Pro Tools macOS版
    Pro Tools macOS版

    Pro Tools 是 Avid 推出的专业数字音频工作站,覆盖多轨录音、无损剪辑、MIDI 编曲、插件处理、自动化混音及声音与画面同步等工作。它拥有 Intro、Artist、Studio 和 Ultimate 等方案。

    WINDOWS 更多
    PixPix 网页版
    PixPix 网页版

    PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。

    Postman Windows版
    Postman Windows版

    Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等

    Docker Desktop Windows版
    Docker Desktop Windows版

    Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。

    Android Studio Windows版
    Android Studio Windows版

    Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,

    JetBrains WebStorm Windows版
    JetBrains WebStorm Windows版

    WebStorm 是 JetBrains 面向 JavaScript、TypeScript 和现代 Web 技术打造的集成开发环境。它提供项目级代码分析、智能补全、安全重构、导航搜索,并集成调试、测试、终端、Git 与常用前端工具,

    JetBrains PhpStorm Windows版
    JetBrains PhpStorm Windows版

    PhpStorm 是 JetBrains 面向 PHP 与现代 Web 开发打造的专业集成开发环境,提供代码补全、静态检查、重构、调试、测试、数据库、版本控制及前端语言支持。Windows 用户可直接下载安装程序,

    JetBrains PyCharm Windows版
    JetBrains PyCharm Windows版

    PyCharm 是 JetBrains 推出的 Python 集成开发环境,提供智能代码补全、错误检查、重构、调试、测试、Git、终端及 Jupyter Notebook 支持。统一版安装后可体验 30 天 Pro 功能,

    JetBrains IntelliJ IDEA Windows版
    JetBrains IntelliJ IDEA Windows版

    JetBrains IntelliJ IDEA 是以 Java、Kotlin 和 JVM 项目为核心的专业集成开发环境,提供智能补全、代码检查、安全重构、调试、测试、版本控制及构建工具集成。统一发行版的核心功能可免费用于商业和非商业项目,

    Visual Studio Code Windows版
    Visual Studio Code Windows版

    Visual Studio Code 是微软推出的免费代码编辑器,Windows 版集成智能补全、代码导航、调试、终端和版本控制,并可通过扩展添加语言、格式化及远程开发能力。它启动较快、配置灵活,

    REAPER Windows版
    REAPER Windows版

    REAPER 是 Cockos 推出的数字音频工作站,适用于录音、MIDI 编曲、音频编辑、混音、母带制作及声音设计。软件安装包小巧,支持多轨录制、灵活路由、自动化、第三方插件和脚本扩展,并提供完整功能的 60 天免费评估期。

    Adobe Audition Windows版
    Adobe Audition Windows版

    Adobe Audition 是面向播客、影视后期、广播与音乐制作的专业音频工作站,提供波形编辑、多轨混音、频谱分析、录音、降噪修复和效果处理等功能。Windows 版通过 Adobe Creative Cloud 安装和管理,

    Pro Tools Windows版
    Pro Tools Windows版

    Pro Tools 是 Avid 推出的专业数字音频工作站,提供多轨录音、音频剪辑、MIDI编曲、插件处理、自动化混音及影视声音制作能力。它适合音乐人、录音师、制作人和音频后期团队使用,并提供免费入门版、订阅方案及永久授权选择。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?