2017-10-11 49 views
0

正如我在標題中解釋的那樣,我需要終止exec。我的腳本如果輸入值不是一個整數。我從位置參數獲取數字。下面是代碼:如果我沒有得到預期的整數值,我該如何終止我的腳本? - BASH Shell腳本

a=9 
kb=0 
var=$2 
var=${var:3:1} 
if [ ${#2} -ne 4 ] 
then 
    echo "ethN is wrong" 
    exit 1 
fi 
if [ "$var" -gt 10 -o "$var" -lt 0 ] 
then 
    echo "N is wrong" 
    exit 1 
else 
    echo "N is ok" 
fi 

當我使用這個條目:

慶典lartc.sh -i ETH#

我的腳本不結束,我希望它是因爲eth#中的「#」不是一個整數,這就是我想要的。 (例如有效輸入:eth2,eth3等)。但是,我的終端對我說,「#」預計是一個整數。我正在驗證長度,數字必須在0-9之間,我只需要驗證它的類型。有任何想法嗎?謝謝!

回答

0

使用=~算子來判斷N是否爲正整數。

stringA =~ regexp stringA匹配擴展正則表達式regexp。僅適用於bash版本3.0及更高版本。只能在[[...]]內使用。正則表達式匹配運算符不再需要在[[...]]中引用 模式。 http://tldp.org/LDP/abs/html/bashver3.html

var=${var:3} 

if [[ ! $var =~ ^[1-9][0-9]*$ ]] 
then 
    echo "ethN is wrong" 
    exit 1 
fi 
+0

謝謝大家對我的幫助,我有點忙大學,這就是爲什麼我現在回答,但我沒有使用您的建議!這個對我來說工作得很好。 (我也測試了Quinn所說的用戶並且它也工作過)謝謝大家,我們一直在搖滾! LML –

0

如果你只是想驗證N的某個位置是一個整數,下面的方法應該是不錯的:

#! /bin/sh 
var=$2 
result=$(echo ${var} | grep -E "eth[0-9]") 

if [ -z "${result}" ]; then 
    echo "N is wrong" 
    exit 1 
else 
    echo 'N is ok' 
fi 
0

如果你正在使用bash,爲什麼不只是測試對[[ $2 =~ "^eth[0-9]$" ]]?如果這是真的,你知道:

  • 輸入有因爲^四個大字和$
  • 前三個字母是eth
  • 最後就是一個數字

你會如果有人在systemd linux上運行此操作並嘗試匹配enp4s0,請執行操作嗎? :P

相關問題