OS/2005-F04
の編集
https://vilab.org/lecture/?OS/2005-F04
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
* シェルスクリプト [#e50c9846] ** 目次 [#fe4867d1] #contents ** シェルスクリプトとは? [#l69424f5] *** 参考になるページ [#g29d3ed1] - http://warp.syns.net/10/ - http://www.stackasterisk.jp/tech/systemManagement/bash03_01.jsp - http://www.ybi.co.jp/koike/src/BSH.htm - http://www.atmarkit.co.jp/flinux/rensai/theory08/theory08a.html - http://www.elect.chuo-u.ac.jp/tsuki/~tsun/lang/sh/ - http://www.ep.sci.hokudai.ac.jp/~inex/y2002/1101/1101_script.html *** シェルスクリプト [#n1b8d6f6] シェルにおける一連のコマンド操作をプログラムとしてファイルに記録しておいて、あとで再現する(実行させる)ことができます。たとえば、以下のような手順でシェルスクリプトを作成します。 + テキストエディタで、以下の内容のファイルを作成する。 #! /bin/sh echo "---start---" ps -aux | grep X echo "----end---" + ファイルを、psxという名前で保存する。 + 次のようにタイプして、psxを実行可能にする。 chmod 755 psx + psxを実行する。どのようになりましたか? ./psx つまり、以上のようにすると、コマンドラインで「./psx」と打つことで、「ps -aux | grep X」と打ったのと同じ効果が得られるようになります。このように、シェルでよく行う手順をあらかじめ記録しておくのがシェルスクリプトです。 なお、1行目の「#! /bin/sh」はシェルスクリプトを実行するシェルを指定するもので、必ずこのように書くようにしてください。 ** シェルスクリプトの文法 [#r61a286e] *** シェル変数 [#x49ad61b] シェルスクリプトの中では(中でなくても)、変数を使うことができます。 - 変数への代入は、「変数名=値」とする。 - 変数の値の参照は、頭にドルマークをつけて「$変数名」とする。 - 下記はシェルスクリプトの例。 #! /bin/sh msg="This is a pen." echo $msg - コマンドライン引数は、「$*」という特殊な変数で得られる。 #! /bin/sh echo $* - コマンドライン引数を1ずつ取り出したいときには、「$1」「$2」…などという表記を用いる。 #! /bin/sh echo $3 $2 $1 - キーボードから文字列を読み込むには、readというコマンドを用いる。 #! /bin/sh read str echo $str - コマンドの実行結果を変数に代入するには、「`」(バッククオート)を用いる。 #! /bin/sh lsout=`ls -la` echo $lsout *** 制御構造 [#n0811230] シェルスクリプトの中では、各種制御構造が使えます。 - if if 条件文 then 条件文と一致した場合の処理 fi if 条件文 then 条件文と一致した場合の処理 else 条件文と一致しなかった場合の処理 fi -- 実際にはifは、たいてい [ ] というコマンドと一緒に使います。以下はシェルスクリプトの例。 #! /bin/sh read key if [ "$key" = "y" ] then echo "YES!" else echo "NO!" fi -- コマンド [ ] の詳しい説明は、「man test」で調べることができます。 - while while 条件文 do 条件文と一致した時の処理 done -- シェルスクリプトの例。 #! /bin/sh key="y" while [ "$key" = "y" ] do echo -n "continue? (y/n) " read key done echo "end." - for for 変数 in リスト do リストの項目を1つずつ変数に代入して処理 done -- シェルスクリプトの例。 #! /bin/sh for i in 1 2 3 4 5 6 7 8 9 10 do echo $i done - case case 文字列 in パターン1) パターン1に一致した時の処理 ;; パターン2) パターン2に一致した時の処理 ;; esac ** 課題(シェルスクリプト) [#c0fab681] 【問1】 以下のような手順を実現するシェルスクリプトを作成し、(添付ファイルではなく)電子メールの本文に貼り付けて、アドレス「report@fig.ele.eng.tamagawa.ac.jp」まで提出してください。 - メールアドレスの「@」はコピーしないで、半角文字で打ち直すこと。 + 画面に「I am an iMac!」と表示するシェルスクリプト。 -- 実行例 $ ./imac ← たとえば imac という名前のシェルスクリプトにした。 I am an iMac! ← 実行結果。 -- ヒント: echo + コマンド引数で指定したディレクトリに、C言語のソースファイルがあるか調べるシェルスクリプト。 -- 実行例 $ ./findc prog ← prog というディレクトリを調べる。 prog/test1.c ← 実行結果。見付かったファイルが列挙される。 prog/test2.c prog/test3.c -- ヒント: find, 引数の取り出し($1) + キーボードからの入力を求め、それが「L」だったら「LEFT」、「R」だったら「RIGHT」と表示するシェルスクリプト。 -- 実行例 $ ./asklr ← シェルスクリプトの実行。 Input L or R ? ← 「L」か「R」を入力するように要求してくる。 R ← ユーザが「R」と入力。 RIGHT ← 結果表示。 -- ヒント: read, if + コマンドの引数で与えられた複数の文字列をたてに表示するシェルスクリプト。 -- 実行例 $ ./vecho yamada takeuchi nakamura shiozawa gogo! yamada takeuchi nakamura shiozawa gogo! -- ヒント: for, 引数の取り出し($*) 【問2】 以下のような動作をするシェルスクリプトを作成しなさい。 + コマンド引数で与えられたファイルを、誰からも読めなくするシェルスクリプト。 -- 実行例 $ ./secret himitsu.txt + C言語のソースファイル(拡張子が .c のファイル)を全部つなげて、1つの大きなテキストファイルにするシェルスクリプト。 -- 実行例(リダイレクト(>)が不要にしてもよい) $ ./cmerge > cfiles.txt + 「I am an iMac!」と表示するシェルスクリプトを改良して、自分のホスト名(コンピュータ名)を表示するシェルスクリプト。 -- 実行例 $ ./hi Hi! My name is a01.cad.eng.tamagawa.ac.jp. + ユーザが「stop」と入力するまで、時刻を表示し続けるシェルスクリプト。 -- 実行例 $ ./dateloop ← シェルスクリプトを起動すると、 2005年 5月 11日 水曜日 11:44:01 JST ← 時刻を表示して入力待ちになる。 ← ただ [Enter] を押したり、 2005年 5月 11日 水曜日 11:44:05 JST aaaa ← 適当な文字や、 2005年 5月 11日 水曜日 11:44:36 JST 123 ← 適当な数字を入れると続行する。 2005年 5月 11日 水曜日 11:44:40 JST stop ← 「stop」と入力すると終了する。 + コマンドラインで指定した月(複数)のカレンダを表示するシェルスクリプト。 -- 実行例 $ ./mcal 4 5 ←コマンドの入力。4月と5月を指定。 April 2005 ←以下、結果出力。4月と5月のカレンダー。 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 May 2005 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 【問3】 以下の言葉をすべて使って、UNIXのサーバについて簡潔に説明する文章を作成しなさい。その際、用語集のような箇条書きではなくて、教科書のようにつながった文章で書くようになさい。なお、無駄に長い文章(コピペ)を送りつけてくる者がいるが、文章は説明すべき内容にふさわしい簡潔な長さにまとめること。 - サーバ - クライアント - lpd - ftpd - httpd - inetd - デーモン(daemon) - ps - サーバのログ - syslog 以上
タイムスタンプを変更しない
* シェルスクリプト [#e50c9846] ** 目次 [#fe4867d1] #contents ** シェルスクリプトとは? [#l69424f5] *** 参考になるページ [#g29d3ed1] - http://warp.syns.net/10/ - http://www.stackasterisk.jp/tech/systemManagement/bash03_01.jsp - http://www.ybi.co.jp/koike/src/BSH.htm - http://www.atmarkit.co.jp/flinux/rensai/theory08/theory08a.html - http://www.elect.chuo-u.ac.jp/tsuki/~tsun/lang/sh/ - http://www.ep.sci.hokudai.ac.jp/~inex/y2002/1101/1101_script.html *** シェルスクリプト [#n1b8d6f6] シェルにおける一連のコマンド操作をプログラムとしてファイルに記録しておいて、あとで再現する(実行させる)ことができます。たとえば、以下のような手順でシェルスクリプトを作成します。 + テキストエディタで、以下の内容のファイルを作成する。 #! /bin/sh echo "---start---" ps -aux | grep X echo "----end---" + ファイルを、psxという名前で保存する。 + 次のようにタイプして、psxを実行可能にする。 chmod 755 psx + psxを実行する。どのようになりましたか? ./psx つまり、以上のようにすると、コマンドラインで「./psx」と打つことで、「ps -aux | grep X」と打ったのと同じ効果が得られるようになります。このように、シェルでよく行う手順をあらかじめ記録しておくのがシェルスクリプトです。 なお、1行目の「#! /bin/sh」はシェルスクリプトを実行するシェルを指定するもので、必ずこのように書くようにしてください。 ** シェルスクリプトの文法 [#r61a286e] *** シェル変数 [#x49ad61b] シェルスクリプトの中では(中でなくても)、変数を使うことができます。 - 変数への代入は、「変数名=値」とする。 - 変数の値の参照は、頭にドルマークをつけて「$変数名」とする。 - 下記はシェルスクリプトの例。 #! /bin/sh msg="This is a pen." echo $msg - コマンドライン引数は、「$*」という特殊な変数で得られる。 #! /bin/sh echo $* - コマンドライン引数を1ずつ取り出したいときには、「$1」「$2」…などという表記を用いる。 #! /bin/sh echo $3 $2 $1 - キーボードから文字列を読み込むには、readというコマンドを用いる。 #! /bin/sh read str echo $str - コマンドの実行結果を変数に代入するには、「`」(バッククオート)を用いる。 #! /bin/sh lsout=`ls -la` echo $lsout *** 制御構造 [#n0811230] シェルスクリプトの中では、各種制御構造が使えます。 - if if 条件文 then 条件文と一致した場合の処理 fi if 条件文 then 条件文と一致した場合の処理 else 条件文と一致しなかった場合の処理 fi -- 実際にはifは、たいてい [ ] というコマンドと一緒に使います。以下はシェルスクリプトの例。 #! /bin/sh read key if [ "$key" = "y" ] then echo "YES!" else echo "NO!" fi -- コマンド [ ] の詳しい説明は、「man test」で調べることができます。 - while while 条件文 do 条件文と一致した時の処理 done -- シェルスクリプトの例。 #! /bin/sh key="y" while [ "$key" = "y" ] do echo -n "continue? (y/n) " read key done echo "end." - for for 変数 in リスト do リストの項目を1つずつ変数に代入して処理 done -- シェルスクリプトの例。 #! /bin/sh for i in 1 2 3 4 5 6 7 8 9 10 do echo $i done - case case 文字列 in パターン1) パターン1に一致した時の処理 ;; パターン2) パターン2に一致した時の処理 ;; esac ** 課題(シェルスクリプト) [#c0fab681] 【問1】 以下のような手順を実現するシェルスクリプトを作成し、(添付ファイルではなく)電子メールの本文に貼り付けて、アドレス「report@fig.ele.eng.tamagawa.ac.jp」まで提出してください。 - メールアドレスの「@」はコピーしないで、半角文字で打ち直すこと。 + 画面に「I am an iMac!」と表示するシェルスクリプト。 -- 実行例 $ ./imac ← たとえば imac という名前のシェルスクリプトにした。 I am an iMac! ← 実行結果。 -- ヒント: echo + コマンド引数で指定したディレクトリに、C言語のソースファイルがあるか調べるシェルスクリプト。 -- 実行例 $ ./findc prog ← prog というディレクトリを調べる。 prog/test1.c ← 実行結果。見付かったファイルが列挙される。 prog/test2.c prog/test3.c -- ヒント: find, 引数の取り出し($1) + キーボードからの入力を求め、それが「L」だったら「LEFT」、「R」だったら「RIGHT」と表示するシェルスクリプト。 -- 実行例 $ ./asklr ← シェルスクリプトの実行。 Input L or R ? ← 「L」か「R」を入力するように要求してくる。 R ← ユーザが「R」と入力。 RIGHT ← 結果表示。 -- ヒント: read, if + コマンドの引数で与えられた複数の文字列をたてに表示するシェルスクリプト。 -- 実行例 $ ./vecho yamada takeuchi nakamura shiozawa gogo! yamada takeuchi nakamura shiozawa gogo! -- ヒント: for, 引数の取り出し($*) 【問2】 以下のような動作をするシェルスクリプトを作成しなさい。 + コマンド引数で与えられたファイルを、誰からも読めなくするシェルスクリプト。 -- 実行例 $ ./secret himitsu.txt + C言語のソースファイル(拡張子が .c のファイル)を全部つなげて、1つの大きなテキストファイルにするシェルスクリプト。 -- 実行例(リダイレクト(>)が不要にしてもよい) $ ./cmerge > cfiles.txt + 「I am an iMac!」と表示するシェルスクリプトを改良して、自分のホスト名(コンピュータ名)を表示するシェルスクリプト。 -- 実行例 $ ./hi Hi! My name is a01.cad.eng.tamagawa.ac.jp. + ユーザが「stop」と入力するまで、時刻を表示し続けるシェルスクリプト。 -- 実行例 $ ./dateloop ← シェルスクリプトを起動すると、 2005年 5月 11日 水曜日 11:44:01 JST ← 時刻を表示して入力待ちになる。 ← ただ [Enter] を押したり、 2005年 5月 11日 水曜日 11:44:05 JST aaaa ← 適当な文字や、 2005年 5月 11日 水曜日 11:44:36 JST 123 ← 適当な数字を入れると続行する。 2005年 5月 11日 水曜日 11:44:40 JST stop ← 「stop」と入力すると終了する。 + コマンドラインで指定した月(複数)のカレンダを表示するシェルスクリプト。 -- 実行例 $ ./mcal 4 5 ←コマンドの入力。4月と5月を指定。 April 2005 ←以下、結果出力。4月と5月のカレンダー。 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 May 2005 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 【問3】 以下の言葉をすべて使って、UNIXのサーバについて簡潔に説明する文章を作成しなさい。その際、用語集のような箇条書きではなくて、教科書のようにつながった文章で書くようになさい。なお、無駄に長い文章(コピペ)を送りつけてくる者がいるが、文章は説明すべき内容にふさわしい簡潔な長さにまとめること。 - サーバ - クライアント - lpd - ftpd - httpd - inetd - デーモン(daemon) - ps - サーバのログ - syslog 以上
テキスト整形のルールを表示する