2017-05-16 5 views
2

whileループを使ってユーザが与えるパラメータをテストするスクリプトを書いています。最後のパラメータは、常に「ローカル」であるべきで、パラメータには固定数は(私たちが望むよう私たちは、できるだけ多くのパラメータを追加することができます)がカウントされていない関数のパラメータをlinuxでwhileループを使って1つずつテストする

はここで、これまでに私のコードです:

#!/bin/sh 

echo 
echo -n 'My OS is : ' 
unamestr=`uname` 
echo $unamestr 

i=1 
while [ "${@:i}" != "local" ] 
do 
    if [ "${@:i}" == "mysql" ] 
    then 
     #add the repository 
     wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 
     sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm 
     yum update 
     #Install mysql 
     sudo yum install mysql-server 
     sudo systemctl start mysqld 
    elif [ "${@:i}" == "chrome" ] 
    then 
     echo 'Installing Chrome' 
    else 
     echo 'Nothing' 
    fi 

    let i++ 
done 

私が知っている必要がありますすべてのパラメータをテストするためには、どのようなwhile条件にする必要があります。

+0

私はあなたの答えを見つけられません@Inian – RoyNasr

答えて

0

考え方は正しいです。適切なループを使用してすべての入力引数をループしてください。これはあなたのPOSIXシェルshで適合するものでなければならない

for arg in "[email protected]"; do 

    # Proceed to next argument if the current is "local" 
    [ "$arg" = "local" ] && continue 

    if [ "$arg" = "mysql" ] 
    then 
     #add the repository 
     wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 
     sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm 
     yum update 
     #Install mysql 
     sudo yum install mysql-server 
     sudo systemctl start mysqld 
    elif [ "$arg" = "chrome" ] 
    then 
     echo 'Installing Chrome' 
    else 
     echo 'Nothing' 
    fi 
done 

、外側のループとしてこれを使用し、内部の小切手を持っています。

+1

これは私の問題をolled!ありがとうと遅れてごめんなさい:D – RoyNasr

1

[email protected]のインデックスにスライス表記を使用する場合は、"${@:i}"は、位置iから開始するすべての位置パラメータを使用することに注意してください。 1つしか取れない場合は、"${@:i:1}"が必要です。それらのすべてを実行するには、$#からのカウントを取得するので、このような何か:

なお、ほとんどすべてのこと(letは、((...))[ .. ]やスライス表記${var:n:m}==)はPOSIXの拡張機能であるのしたがって、hashbangはBashのような他のシェルを示すはずです。

Inianが他の回答であったとして、あなたは、現在のインデックスPOSIXlyを使用する必要がある場合、すべての 位置パラメータをループする通常のPOSIXの方法は、

for arg in "[email protected]" ; do... 

または

for arg do ... 

んです何かのように

i=1 
for arg do 
    if [ "$#" -eq "$i" ] ; then echo "the last one" ; fi 
    echo "$i: $arg" 
    i=$((i + 1)) 
done 
関連する問題