シェル

端末の行バッファをやめたい

catコマンドを打ったあとに、HelloWorldと打ち Enterキーを押すと、HelloWorldが返ってくる。 $cat HelloWorld HelloWorld その後は Ctl+c か Ctl+d で終了。 行単位ではなくHelloWorldを1文字ずつ、都度出力させるために stty -icanon min 1 と打てば、再び…

環境による仕様の違いを関数で統一

例えばecho。 #!/bin/sh case "`echo -e`" in -e) ECHO() { echo "$@"; } ;; *) ECHO() { echo -e "$@"; } ;; esac この関数で環境の違いを吸収。 echo -e に統一できる。

関数を使った処理

関数を使ったシェルを作成してみる。 !/bin/sh add() { expr "$1" + "$2" + "$3" } add 1 2 3 これによって出力されるのは 6 ちなみに$1、$2、$3は順序よく引数を付けられているので $3を$4とかに変更するとうまくいかない。 .

条件を使ったループ

while文を使って、条件が成立する限りループさせる。 hoge=1 max=3 while [ "$hoge" -le "$max" ]; do echo "$hoge" hoge=`expr "$hoge" + 1` done $hogeに入っている値が$maxの値よりも少ないとループし続ける。 exprが計算をし、出力をする。 演算子と数字…

バッククォートの書き方

日本語キーボードでバッククォートを書くには shift + @ と打てば出てくる。 シェル実行時にエラー文が出るから何でだろう??と調べていたら バッククォートで囲うべき箇所をシングルクォートで囲んでいたからということが判明。 でもどうやってキーボード…

for文でループ

シェルで単純なループ処理を記載するにはforを使用。 for hoge in aa bb cc do echo "$hoge" done これの実行結果は aa bb cc が出力される。 流れとしては、まずaaをhogeに代入して、echo。 その次にbbといった感じでループ。 ループの中でbreakを記載して…

caseで効率よく分岐処理

case文でif文よりも綺麗に分岐処理を記述することが可能。 case "$hoge" in AAA) echo 'hogeの値はAAA' ;; BBB) echo 'hogeの値はBBB' ;; CCC|DDD) echo 'hogeの値はCCC、又はDDD' ;; *) echo 'hogeの値はAAA、BBB、CCC、DDD以外' ;; esac それぞれの条件に…

シェルでif文

#!/bin/sh hoge='Hello'if [ "$hoge" = hello ] ; then echo '$hogeはhello' else echo '$hogeはhelloじゃない' fi このコードだと 1行目にシェルスクリプトであることを宣言して 2行目でhogeにHelloを代入。 ifは条件分岐で、内の条件がTRUE(OK)ならthen…

変数への代入

hogeという変数に、値を入れたい場合は hoge='Hello!!' というように入れる。 ポイントとしては、= の前後にスペースを入れてはいけないこと。 参照する場合は、hogeに$を付けてecho echo $hoge ただ、これだと$hogeの中に*や?があったときに展開されてしま…

シェルスクリプトの書き方

シェルに詳しくないので、シェルを基礎から見直してみる。 シェルを書く最初のポイントとしては ファイルの1行目に #!/bin/sh を書く。 ファイルに実行権限を与える。→ chmod +x ファイル名 カレントディレクトリにファイルがある場合は、「./ファイル名」で…