まず、x.sh
お気に入りのエディターでこのファイル ( ) を作成します。
#!/bin/bash
# the variable $# holds the number of arguments received by the script,
# e.g. when run as "./x.sh one two three" -> $# == 3
# if no input and output file given, throw an error and exit
if (( $# != 2 )); then
echo "$0: invalid argument count"
exit 1
fi
# $1, $2, ... hold the actual values of your arguments.
# assigning them to new variables is not needed, but helps
# with further readability
infile="$1"
outfile="$2"
cd scripts/x
# if the input file you specified is not a file/does not exist
# throw an error and exit
if [ ! -f "${infile}" ]; then
echo "$0: input file '${infile}' does not exist"
exit 1
fi
python x.py -i "${infile}" -o "${outfile}"
次に、それを実行可能にする必要があります(詳細情報を入力man chmod
してください):
$ chmod +x ./x.sh
./x.sh
これで、同じフォルダーからこのスクリプトを実行できます。
$ ./x.sh one
x.sh: invalid argument count
$ ./x.sh one two
x.sh: input file 'one' does not exist
$ ./x.sh x.sh foo
# this is not really printed, just given here to demonstrate
# that it would actually run the command now
cd scripts/x
python x.py -i x.sh -o foo
出力ファイル名が入力ファイル名に何らかの形で基づいている場合は、コマンドラインで指定する必要がなくなることに注意してください。次に例を示します。
$ infile="myfile.oldextension"
$ outfile="${infile%.*}_converted.newextension"
$ printf "infile: %s\noutfile: %s\n" "${infile}" "${outfile}"
infile: myfile.oldextension
outfile: myfile_converted.newextension
ご覧のとおり、ここには改善の余地があります。たとえば、scripts/x
ディレクトリが実際に存在するかどうかは確認しません。また、スクリプトにファイル名を尋ねさせ、コマンド ラインでファイル名を指定したくない場合は、 を参照してくださいman read
。
シェル スクリプトについて詳しく知りたい場合は、BashGuideとBash Guide for Beginnersを読み、その場合はBashPitfallsも確認してください。