簡體   English   中英

在bash中使用shift with case語句

[英]Using shift with case statement in bash

我試圖結合這兩個參數來使我的功能工作

#!/bin/bash

while [ $? -gt 0 ] 
do
  case "$1" in             
    [0-9]*-[0-9]*)
      for ip in $(sec ${1%-*} ${##*-})
      do
        ping -c 1 192.168.1.$ip
        (shift)?
      done
      ;;
    a)
      >/dev/null;
      [ $? -eq 0 ] && echo "192.168.1.$ip is up!" ||:;
      ;;
  esac
done

通常,如果我把它們都放在[0-9]*-[0-9]*)參數中,我們可以得到例如輸出

someTest.sh 90-105 

它會檢查90到105之間的IP號碼但是我想這樣做:

sometest.sh 90-105 -a

我看到您要從命令行中指定的范圍內檢查機器是上升還是下降。 你可以使用for循環來完成它。

#!/bin/bash

a=$1;
b=$2;

for ((i=a;i<=b;i++)) do

   ping -c 1 -w 1 192.168.1.$i  >> /dev/null 2>&1

   if [ $? -eq 0 ]; then
      echo "192.168.1.$i is up";
   else
      echo "192.168.1.$i is down";
   fi

done

從命令行運行它: ./script 10 50將機器從192.168.1.10 ping到192.168.1.50。


如果你想傳遞像: ./script 10-50這樣的參數,你也可以這樣做:

#!/bin/bash

OLDIFS=$IFS
IFS=$'\-'
set $@

a=$1;
shift;
b=$1;

for ((i=a;i<=b;i++)) do

   ping -c 1 -w 1 192.168.1.$i  >> /dev/null 2>&1
   if [ $? -eq 0 ]; then
     echo "192.168.1.$i is up";
   else
     echo "192.168.1.$i is down";
   fi

done

IFS = $ OLDIFS

如果您想要做的是在一定范圍內ping IP,並且還能夠傳遞其他參數(-a和/或-b),您可以查看getopts以輕松處理所需數量的參數,或沒有選項:

usage()
{
cat << EOF
usage: $0 options iprange

OPTIONS:
   -a      set a option
   -b      set b option
   -r      set rangei, e.g 1 10
EOF
}

A=
B=

while getopts “abr:” OPTION
do
     case $OPTION in
         a)
             A=1
             ;;
         b)
             B=1
             ;;
         r)  
             RANGE="$OPTARG"
             ;;
         ?)
             usage
             exit
             ;;
     esac
done

for i in $(seq $RANGE); do
    ping -c 1 -w 1 192.168.1.$i  >> /dev/null 2>&1

    if [ $? -eq 0 ]; then
        echo "192.168.1.$i is up";
    else
        echo "192.168.1.$i is down";
fi
done

你會這樣稱呼:

./somescript.sh -a -b -r“10 34”

您可以檢查$ A和$ B變量,並根據它們的值執行您想要執行的操作。

我知道,在范圍延遲之間沒有划線並且你需要引號,快速寫下來,你可以使用類似KingsIndian的解決方案來解決這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM