2016-03-03 45 views
1

因此,運行我的腳本,我使用的參數是這樣的:擊:多個條件中,如果確認的參數

./script 789 

的參數是改變文件或目錄的權限,和我倒要檢查是否每一個數字是0和7之間,所以我試圖爲未來的事情:

if [[ ${1:0:1} -ge 0 && ${1:0:1} -le 7 ]] && [[ ${1:1:1} -ge 0 && ${1:1:1} -le 7]] && [[ ${1:2:1} -ge 0 && ${1:2:1} -le 7]] 
then {go ahead with the code} 
else 
    echo "Error: each digit in the parameter must be between 0 and 7" 
fi 

如果這是真的,然後繼續用腳本,否則顯示錯誤信息,但它不」 t似乎工作。

+0

比較US $ 1的正則表達式' [0-7] [0-7] [0-7]' –

+0

單個字符不能是負面的麻木呃, – karakfa

+0

@WilliamPursell我該怎麼做? – magalenyo

回答

2

您希望匹配參數與正則表達式[0-7][0-7][0-7][0-7]{3}。在bash中,你可以這樣做:

[[ "$1" =~ [0-7]{3} ]] || { echo 'invalid parameter' >&2; exit 1; } 

或者:

echo "$1" | grep -Eq '[0-7]{3}' || { echo err message >&2; exit 1; } 
+0

謝謝! 我還有另外一個問題,那是什麼&&2? – magalenyo

+0

'>&2'將echo的輸出重定向到stderr。這是一條錯誤消息,錯誤消息屬於stderr。 –

+0

這可能看起來很平凡,因爲如果從命令行運行腳本作爲一次性命令,則stderr和stdout都與tty關聯,但這是很好的做法,並且在您的工具用作過濾器時會變得很重要(鏈接在管道中)。 –

-1

,這可能是另一種方式

#!/bin/bash 

#Stored input parameter 1 in a variable 
perm="$1" 

#Checking if inserted parameter is empty, in that case the script will show a help 
if [ -z "${perm}" ];then 
     echo "Usage: $0 <permission>" 
     echo "I.e.: $0 777" 
     exit 
else 
     #if the parameter is not empy, check if each digit is between 0-7 
     check=`echo $perm| grep [0-7][0-7][0-7]` 
     #if the result of command is empty that means that the input parameter contains at least one digit that's differs from 0-7 
     if [ -z "${check}" ];then 
       echo "Error: each digit in the parameter must be between 0 and 7" 
     fi 
fi 

這就是輸出

[shell] ➤ ./test9.ksh 999 
Error: each digit in the parameter must be between 0 and 7 

[shell] ➤ ./test9.ksh 789 
Error: each digit in the parameter must be between 0 and 7 

[shell] ➤ ./test9.ksh 779 
Error: each digit in the parameter must be between 0 and 7 

[shell] ➤ ./test9.ksh 777 
+0

我可以得到一個簡短的解釋嗎?我對shell腳本有點陌生,不知道大部分命令是做什麼的 – magalenyo

+1

檢查'grep'的結果是否爲非空是* not *正確的方式來使用'grep'這種事情。改用退出狀態。例如'if echo string | grep -q模式;然後' –

+0

我在腳本中添加了一些註釋 – ClaudioM