茶トラ猫エンジニア

フリーランスとして働く、先が見えないエンジニアのメモ帳

シェルスクリプトで文字列操作(文字数、抜き出し、ヒアドキュメント)

これまでシェスルクリプトを利用する際には、複数のコマンドを実行して処理を自動化するために使う機会が多かったです。

今回は新たに文字列を制御するケースに遭遇したので、その内容を備忘録として残しておきたいと思います。

文字列の長さを算出する

まず、変数に入っている文字列の長さを算出するには以下のように表現します。

$ vi rilakkuma.sh

#!/bin/sh

KUMA="ABCDE"

echo "LEGNTH : ${#KUMA}"
$ sh rilakkuma.sh

LEGNTH : 5

上記の通り、文字列 ABCDE の長さは 5 バイトなので長さも 5 と表示されます。

変数を読み出す際にシャープ(#)を付けるだけです。

文字列の抜き出し

次に、文字列の特定の部分だけを表示してみます。

Java だと substring、PHP だと substr と同じです。

# 5文字とも表示
$ echo "ABCDE" | cut -c 1-5
ABCDE


# 1から3文字目まで表示
$ echo "ABCDE" | cut -c 1-3
ABC

この cut と変数の文字列の長さを利用すればシェルスクリプト内でも文字列の一部を制御できそうです。

試しに、特定の文字列から最後の 1 文字を除去した文字列を表示してみます。

$ vi rilakkuma.sh

#!/bin/sh

KUMA="ABCDE"

LN=`echo $((${#KUMA} - 1))`

WORD=`echo ${KUMA} | cut -c 1-${LN}`

echo ${WORD};
$ sh rilakkuma.sh

ABCD

ヒアドキュメント

シェル(Shell)でヒアドキュメントを使うと、まとめて文章や文字列が表示できて便利です。

mail の body 出力として過去によく利用していましたが、ファイル出力は echo ばかり使っていたような気がします。

ヒアドキュメントで表現した内容をファイルに標準出力する方法を紹介します。

#!/bin/sh

# echo を使うパターン
echo "AAA" >> test1.txt
echo "BBB" >> test1.txt

# ヒアドキュメントを使うパターン
cat <<SETUP >> test2.txt
AAA
BBB
SETUP