コマンドライン引数を渡したいテキストファイルがあります。たとえば、
./scriptname.sh abc.sh
scriptname.sh
abc.sh
テキストファイルにコピーするには、どのコマンドを書くことができますかnew.txt
?
ベストアンサー1
ボンのような殻
Bourneなどのシェル(.sh
拡張機能に応じてスクリプトで使用することをお勧めします):
#! /bin/sh -
if [ "$#" -gt 0 ]; then # if I was given at least 1 argument
cp -- "$1" new.txt # where $1 is the first argument... $9 the 9th
# and ${10} the 10th (not $10 which is ${1}0)
else
echo >&2 Not given enough arguments
exit 1
fi
(--
オプションの終わりを表示して、で始まるオプションとして扱われないようにする必要があります$1
。)cp
-
1つ以上の引数が指定されているかどうかを確認するより短い方法は次のとおりです。
#! /bin/sh -
cp -- "${1?Not given enough arguments}" new.txt
${parameter?message}
次のようなエラーでシェルが終了する原因は何ですか?情報このパラメーターが設定されていない場合。
または本当に怠惰な場合:
#! /bin/sh -u
cp -- "$1" new.txt
-u
シェルが終了する原因どのパラメーターが設定されていないパラメーター拡張。
コピーみんな議論:
#! /bin/sh -
if [ "$#" -gt 0 ]; then # if I was given at least 1 argument
cp -- "$@" /some/dir/ # where "$@" expands to all the script's
# arguments as separate arguments to cp
else
echo >&2 Not given enough arguments
exit 1
fi
${@?...}
(移植可能なので、引数なしでスクリプトに依存したり終了したりすることはできません。)-u
パラメータを繰り返すようにfor
基本ループを設定する方法は次のとおりです。
#! /bin/sh -
for file do
cp -- "$file" "$file.new"
done
もちろん、次のようにすることもできます。
#! /bin/sh -
for file in "$@" do
cp -- "$file" "$file.new"
done
明示的に作成します(ただし、一部のシェルでは効率が悪くなります)。
他の殻
(引数個数確認は別に残してください)
csh
/tcsh
cp -- $1:q new.txt # one argument, properly quoted cp -- $argv:q /some/dir # all arguments
rc
/es
:cp -- $1 new.txt cp -- $* /some/dir
fish
cp -- $argv[1] new.txt cp -- $argv /some/dir