hana_shinのLinux技術ブログ読者になるhana_shinのLinux技術ブログLinuxの技術情報を掲載しています。ネットワークをメインに掲載していきます。Language)とは?ソフトウェアのテスト工程を自動化するために、Tclとexpectについて調査しました。この記事では、Tclの使い方をまとめています。Tclはスクリプト言語で、「ティクル」と発音します。Expectはリモートシステムとの対話的なプログラムを自動化するためのプログラムです。ExpectのスクリプトからTclを呼び出して、処理を実行します。Expectについては、別途記事を作成する予定です。検証環境AlmaLinux版数は以下のとおりです。Tiger)カーネル版数は以下のとおりです。インストール方法tclパッケージをインストールします。tcltclパッケージの版数を確認します。putsコマンドの使い方putsコマンドは文字列を標準出力やファイルに出力するコマンドです。標準出力に文字列を出力するスクリプトを作成します。world!!"スクリプトを実行すると、標準出力に文字列が出力されていることがわかります。getsコマンドの使い方getsコマンドは、標準入力からユーザーが入力した文字列を取得するコマンドです。標準入力からユーザーが入力した文字列をsetコマンドで変数strに設定したあと、putsコマンドで変数strの内容を標準出力に繰り返し出力するスクリプトを作成します。$str}スクリプトを実行すると、キーボードから入力した111,222が標準出力に出力されていることがわかります。スクリプトを終了するには、Ctrl+cを押下します。setコマンドの使い方setコマンドは変数に値を設定するコマンドです。変数varに設定した文字列を標準出力に出力するスクリプトを作成します。$varスクリプトを実行すると、変数varに設定した文字列(123,abc)が表示されていることがわかります。変数varの値が1なら、oneと表示するスクリプトを作成します。"one"}スクリプトを実行すると、oneと表示されていることがわかります。elseコマンドの使い方lindexコマンドはリストから要素を取り出すためのコマンドです。0は第1引数を示します。引数に1を指定するとone、1以外を指定するとothersと表示するスクリプトを作成します。"others"}スクリプトを実行すると、引数に1を指定するとone、1以外を指定するとothersと表示されていることがわかります。引数に1を指定するとone、2を指定するとtwo、1,2以外を指定するとothersと表示するスクリプトを作成します。"others"}スクリプトを実行すると、引数に1を指定するとone、2を指定するとtwo、1,2以外を指定するとothersと表示されていることがわかります。whileの使い方setコマンドでdateの実行結果を変数xに設定したあと、putsコマンドで変数xの値を出力します。これを繰り返すスクリプトを作成します。1000;}スクリプトを実行すると、1秒間隔で時刻が表示されていることがわかります。Ctrl+cを押下してスクリプトを終了します。forを使った繰り返し変数xに初期値0を設定し、変数xを+1ずつ増加させ、変数xが3未満になるまで変数xの値を表示するスクリプトを作成します。$x"}スクリプトを実行すると、0,1,2と表示されていることがわかります。foreachを使った繰り返し変数iにxxを設定したあと、putsコマンドで変数iの値を出力するスクリプトを作成します。$i}スクリプトを実行します。以下の変数を使って、引数を確認するスクリプトを作成します。lindexを使って第1引数を返します。lindexを使って第2引数を返します。1]スクリプトを実行すると以下のことがわかります。]引用符はコマンド置換子です。]で挟まれたリストはコマンドラインとみなされ、その実行結果がひとつのアーギュメントとしてコマンドに渡されます。x+y=$retスクリプトを実行します。compare)stringコマンドのcompareオプションを使って、大文字/小文字を区別するスクリプトを作成します。equalと表示されていることがわかります。-nocase)stringコマンドのcompareオプションに-nocaseを指定して、大文字/小文字を区別しないスクリプトを作成します。equal"}スクリプトを実行すると、引数がaaaでもAAAでもequalと表示されていることがわかります。ファイルから文字列を読み込む方法テスト用のファイルを作成します。clientファイルの終端(eof)まで1行ずつ変数fdに読み込み、それを標準出力に出力するスクリプトを作成します。$fdスクリプトを実行すると、テスト用ファイルの中身が表示されていることがわかります。文字列を分割する方法splitコマンドに空白とハイフンをデリミッタにして文字列を分割するスクリプトを作成します。2]スクリプトを実行します。様々なフォーマットで時刻を表示するスクリプトを作成します。%Y/%m/%d,%H:%M:%S]"スクリプトを実行します。外部コマンドを実行する方法(exec)execは外部コマンドの実行結果を返すコマンドです。ls等のOSのコマンドを実行して、ファイル一覧を返すことができます。時刻を表示する方法setコマンドでdateの実行結果を変数xに設定して、putsコマンドで変数xの値を出力するスクリプトを作成します。$xスクリプトを実行すると、dateの実行結果が表示されていることがわかります。-lの実行結果を変数xに設定して、putsコマンドで変数xの値を出力するスクリプトを作成します。$xスクリプトを実行すると、ファイルの一覧が表示されていることがわかります。カレンダーを表示する方法カレンダーを表示するスクリプトを作成します。$xスクリプトを実行すると、カレンダーが表示されていることがわかります。配列に値を代入/配列要素の値を表示する方法setコマンドでxという名前の配列にaaa,bbb,cccを代入し、putsコマンドで配列の要素を表示するスクリプトを作成します。$x(2)スクリプトを実行すると、配列xに代入した文字列が出力されていることがわかります。size)配列の要素数を求めるスクリプトを作成します。elements"スクリプトを実行すると、配列の要素数が3であることがわかります。exists)配列が存在するかどうかを確認するスクリプトを作成します。配列が存在するかどうかはarrayコマンドのexistsオプションを使って確認します。配列が存在する場合は1,配列が存在しない場合は0を返します。x]"スクリプトを実行します。get)arrayコマンドのgetオプションを使って、配列の要素を返すスクリプトを作成します。2]スクリプトを実行します。2次元配列の使い方スクリプトを作成します。}}スクリプトを実行します。連想配列とは、文字列など非負整数以外のデータを添字に使用することができる配列のことです。tokyo,osakaを添え字にした連想配列に文字列の代入、代入した文字列を表示するスクリプトを作成します。$x("osaka")スクリプトを実行します。リストの使い方リストとは、中括弧あるいはダブルクォートを使ってスペースで区切られた文字列のことです。setコマンドを使って変数xにリストを代入して、putsコマンドで変数xに設定されたリストの第1、第3要素を標準出力に出力します。最後にリストの要素数を出力するスクリプトを作成します。$x]"スクリプトを実行すると、リストの第1、第3要素が表示されていることがわかります。要素数が3であることもわかります。exists)テスト用のファイルを作成します。sample.txtsample.txtfileコマンドのexistsオプションを使って、カレントディレクトリにsample.txtが存在するかどうかを確認するスクリプトを作成します。FOUND"}スクリプトを実行すると、カレントディレクトリにsample.txtが存在するので、FOUNDと表示されていることがわかります。./test.expFOUNDカレントディレクトリからテスト用ファイルを削除します。y再度、スクリプトを実行します。FOUNDと表示されていることがわかります。rootname)テスト用のファイルを作成します。sample.tar.gzsample.tar.gzfileコマンドのrootnameオプションを使って、最後のドットまでのファイル名を返すスクリプトを作成します。$yスクリプトを実行します。mkdir)テスト用ディレクトリを確認します。testディレクトリが存在しないことを確認します。そのようなファイルやディレクトリはありませんfileコマンドのmkdirオプションを使って、ディレクトリを作成するスクリプトを作成します。$test_dirスクリプトを実行すると、testディレクトリが作成されたことがわかります。変数の有効範囲globalコマンドを使うことで、関数外の変数にアクセスすることができます。globalコマンドは、関数内で実行する必要があります。ここでは、関数test1内で変数xをグローバル変数として定義しています。[test2]"スクリプトを実行します。その他(sourceコマンドの使い方)sourceコマンドは、外部のtclソースファイルを読み込むコマンドです。Commandsexpectパッケージをインストールします。expectsourceコマンドで読み込むスクリプトを作成します。sample"}スクリプトを作成します。proc.exptestスクリプトを実行します。私が業務や記事執筆で参考にした書籍を以下のページに記載します。)はてなブログをはじめよう!hana_shinさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。