2015-10-16 17 views
0

我正在Uni介紹Linux和Shell腳本課程。剛剛遇到問題。Shell腳本檢查一個字符串是否包含兩個in-parameters

我需要做一個if語句來控制是否只有2個參數,然後寫出來,如果沒有返回警告字符串。

#!/bin/bash 

echo "Please input two variables: " 

read var 

if var = ' '; then 
    echo var 
else 
    echo "More or less than two arguments" 
fi 

這是我到目前爲止。我想我可以讓if語句在字符串中尋找一個空格。

這是我在StackExchange上的第一篇文章。所以你好,所有的同胞堆棧交易所:=)

+0

你需要檢查是否有在命令行或在標準輸出兩個參數你的腳本? –

+0

標準輸出 –

+0

我的意思是輸入,對不起。請檢查我的答案 –

回答

0

你可以做的是在你的輸入中創建一個array然後檢查它的長度。

#!/bin/bash 

echo "Please input two variables: " 
read var 

myArray=($var) 

if [ ${#myArray[@]} -eq 2 ]; 
then 
     echo ${myArray[*]} 
else 
     echo "More or less than two arguments" 
fi 

值在bash陣列由空格隔開,因此,當被var擴大每個字被創建爲一個新的數組索引。

0

你可以使用$#來檢查腳本被調用的變量的數量。然後使用$1$2來回顯變量。

if [ $# -eq 2 ] 
then 
    echo "$1 $2" 
fi 
+0

雖然真正的'$#'會給你提供的參數的數量,這個問題的輸入是來自標準輸入,而不是命令行參數,所以這不會做什麼需要。 – AJefferiss

0

爲了從標準輸入讀取兩行,並檢查它們是不是空的,你可以使用以下命令:

#!/bin/bash 

echo "Please input two variables: " 

read var1 
read var2 

if [ -n "$var1" -a -n "$var2" ]; then 
    echo $var1 
    echo $var2 
else 
    echo "More or less than two arguments" 
fi 

我已經修改了你的腳本來添加一個新的變量(var2),並更名爲varvar1

然後,if被修改爲檢查這兩個變量都沒有空與test-n開關(上殼式help test得到關於更多信息)。我沒有使用命令test,而是使用了更易於使用程序員的[,它與test的作用相同,但需要結尾]

0

而不是等到命令開始運行後才接受輸入,只需接受命令行參數即可。您的腳本會是什麼樣子:

if (($# != 2)); then 
    echo "Need exactly two arguments" 
    exit 1 
fi 

# Use $1 and $2 as needed 

然後調用與

myscript hello world 
相關問題