スクリプトに複数のパラメータを許可させるにはどうすればよいですか?

スクリプトに複数のパラメータを許可させるにはどうすればよいですか?

これは非常に単純なスクリプトです。

#!/usr/local/bin/bash
set -e
if [ "$#" -lt 1 ]
then
echo  "Please insert at least one argument"
exit
else
echo -e "\c"
fi


if [ -h  "$1" ]
then
         echo "$1 is a symbolic link"
else    
         echo "$1 in not a symbolic link"
fi


私の質問は:複数のパラメータを認識するようにスクリプトをどのように変更できますか? 4つのファイルがあり、スクリプトを返したいです。

$1 is a symbolic link
$2 is not a symbolic link
$3 is not a symbolic link

など

どうすればいいですか?

答え1

$@元のスクリプトと同じ構造を使用して配列(つまり、コマンドラインで指定された引数のリスト)を繰り返すだけです。

#!/usr/local/bin/bash
set -e
if [ "$#" -lt 1 ]
then
echo  "Please insert at least one argument"
exit
else
echo -e "\c"
fi


for file in "$@"
do
    if [ -h  "$file" ]
    then
         echo "$file is a symbolic link"
    else    
         echo "$file is not a symbolic link"
    fi
done

同じ内容の単純化されたバージョンは次のとおりです。

#!/usr/bin/env bash
[ "$#" -lt 1 ] && printf "Please give at least one argument\n" && exit 
for file 
do
    [ -h "$file" ] && printf "%s is a symbolic link\n" "$file" || 
        printf "%s is not a symbolic link\n" "$file"
done

答え2

シフト勤務の変更について言及した人はいませんか?

if [ x = "x$1" ] ; then
    echo need at least one file
    exit 1
fi

while [ x != "x$1" ] ; do
  if [ -h  "$1" ]; then
    echo "$1 is a symbolic link"
  else    
    echo "$1 is not a symbolic link"
  fi
  shift
done

答え3

あなたはそれを使用することができますforループスクリプトに渡されたすべてのファイルを処理します。

for f do
  if [ -h  "$f" ]; then
    printf "%s is a symbolic link\n" "$f"
  else    
    printf "%s is not a symbolic link\n" "$f"
  fi
done

答え4

私が読む方法は、私のプライベートスクリプトに複数のパラメータを取る方法です。たとえば、wgetは "wget url1 url2 url3"を実行できます。

スクリプト全体を「マイスクリプトの行」とマークされた場所に貼り付け、このファイルを新しいスクリプトとして保存します。

ARGUMENTS=$(echo "$@"| tr " " "\n") ; while read A; do "lines from my script";done < "$ARGUMENTS"

スクリプトのパラメータは$ @変数に保存されます。この小さなスクリプトはスクリプトを包み込み、複数回実行して毎回次の引数を渡します。現在のスクリプトが$ 1を参照している場合は、それを$ Aに変更する必要があります。

関連情報