argv が提供されない場合、スクリプトエラーが発生します。

argv が提供されない場合、スクリプトエラーが発生します。

SSHログイン用にExpectスクリプトを実行する必要がありますが、コマンド実行時にargvを提供するファイルを生成する必要があります。

次のスクリプトファイルを実行すると生成されます。

#!/usr/bin/expect

set file [lindex $argv 0]
set date [exec date "%Y-%m-%d"]

spawn sh -c "touch output-$file-$date.csv"

コマンド出力

[root@centseven ~]# ./demo A
spawn sh -c touch output-A-2017-September-21.csv
[root@centseven ~]# ll output-
output--2017-September-21.csv   output-A-2017-September-21.csv

ただし、argvを使用するとスクリプトが機能し、ファイルが生成されます。私が望むのは、スクリプトの実行中にargvが提供されない場合は./demoエラーが発生し、argvはAまたはBでなければならず、それ以外は何もしてはいけないということです。

可能ですか?

ベストアンサー1

上のどこかに次のものを追加します。

if {[llength $argv] == 0} {
  puts stderr "Usage: $argv0 file"
  exit 1
}

llength(n)リストの長さの手順の詳細については、参考資料を参照してください。Aorは式をB単一の引数としてif受け入れるのでexpr(n)(非常に奇妙な制限)

if {[llength $argv] != 1} {
  puts stderr "Usage: $argv0 (A|B)"
  exit 1
}
set firstarg [lindex $argv 0]
if {!($firstarg eq "A" || $firstarg eq "B")} {
  puts stderr "Usage: $argv0 (A|B)"
  exit 1
}

おすすめ記事