これまでシェスルクリプトを利用する際には、複数のコマンドを実行して処理を自動化するために使う機会が多かったです。
今回は新たに文字列を制御するケースに遭遇したので、その内容を備忘録として残しておきたいと思います。
目次(もくじ)
文字列の長さを算出する
まず、変数に入っている文字列の長さを算出するには以下のように表現します。
1 2 3 4 | $ vi rilakkuma.sh #!/bin/sh KUMA="ABCDE" echo "LEGNTH : ${#KUMA}" |
1 2 | $ sh rilakkuma.sh LEGNTH : 5 |
上記の通り、文字列 ABCDE の長さは 5 バイトなので長さも 5 と表示されます。
変数を読み出す際にシャープ(#)を付けるだけです。
文字列の抜き出し
次に、文字列の特定の部分だけを表示してみます。
Java だと substring、PHP だと substr と同じです。
1 2 3 4 5 6 7 | # 5文字とも表示 $ echo "ABCDE" | cut -c 1-5 ABCDE # 1から3文字目まで表示 $ echo "ABCDE" | cut -c 1-3 ABC |
この cut と変数の文字列の長さを利用すればシェルスクリプト内でも文字列の一部を制御できそうです。
試しに、特定の文字列から最後の 1 文字を除去した文字列を表示してみます。
1 2 3 4 5 6 7 8 9 | $ vi rilakkuma.sh #!/bin/sh KUMA="ABCDE" LN=`echo $((${#KUMA} - 1))` WORD=`echo ${KUMA} | cut -c 1-${LN}` echo ${WORD}; |
1 2 3 | $ sh rilakkuma.sh ABCD |
ヒアドキュメント
シェル(Shell)でヒアドキュメントを使うと、まとめて文章や文字列が表示できて便利です。
mail の body 出力として過去によく利用していましたが、ファイル出力は echo ばかり使っていたような気がします。
ヒアドキュメントで表現した内容をファイルに標準出力する方法を紹介します。
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/sh # echo を使うパターン echo "AAA" >> test1.txt echo "BBB" >> test1.txt # ヒアドキュメントを使うパターン cat <<SETUP >> test2.txt AAA BBB SETUP |