Netassist Blog

単純なシェルスクリプト

お久しぶりです。mnakamuraです。

ブログの当番が回ってきました。
今回は私が自習で作成した、簡単なシェルスクリプトをいくつかご紹介しようかと思います。

 

①2つの文字列を入力し、比較する
■シェルの中身


[root@mnakamura shellscript]# cat word.sh
#!/bin/bash
read -sp " 文字列1を入力して下さい。 : " str1
echo
read -sp " 文字列2を入力して下さい。 : " str2
echo

echo -e "\n 入力した文字列"
echo " 1つ目の文字列は : " $str1 "です。"
echo " 2つ目の文字列は : " $str2 "です。"
echo -n -e "\n"
[ "$str1" = "$str2" ] && echo "これらは同じです!" || echo "これらは異なります!"

説明:文字列を2つ入力し、それらをそれぞれ出力しつつ、同じ文字列か否かを判定します。

▼パターンA:同じ文字列を入力した場合


[root@mnakamura shellscript]# sh word.sh
文字列1を入力して下さい。 :
文字列2を入力して下さい。 :

入力した文字列
1つ目の文字列は : あいうえお です。
2つ目の文字列は : あいうえお です。

これらは同じです!

▼パターンB:異なる文字列を入力した場合


[root@mnakamura shellscript]# sh word.sh
文字列1を入力して下さい。 :
文字列2を入力して下さい。 :

入力した文字列
1つ目の文字列は : あいうえお です。
2つ目の文字列は : かきくけこ です。

これらは異なります!

ポイント:readコマンドを利用して、入力欄を作成しています。
[-sp]のオプションをつけることで、入力内容を表示しない
(エコーバックを消す)事が可能です。
入力した引数は、そのまま最下行の条件式でも利用します。
尚、echoを使用した改行方法は色々あります。

 

②2つの数字を入力し、加減乗除の結果をそれぞれ出力する
■シェルの中身


[root@mnakamura shellscript]# cat caluculate.sh
#!/bin/bash
read -p " 数字1を入力して下さい。 : " str1
echo
read -p " 数字2を入力して下さい。 : " str2
echo

echo "足し算の結果は" $(( $str1 + $str2)) "です。"
echo "引き算の結果は" $(( $str1 - $str2)) "です。"
echo "掛け算の結果は" $(( $str1 * $str2)) "です。"
echo "割り算の結果は" $(( $str1 / $str2)) "で、余りは" $(( $str1 % $str2)) "です。"

▼パターンA:割り算で余りがない場合


[root@mnakamura shellscript]# sh caluculate.sh
数字1を入力して下さい。 : 30

数字2を入力して下さい。 : 2

足し算の結果は 32 です。
引き算の結果は 28 です。
掛け算の結果は 60 です。
割り算の結果は 15 で、余りは 0 です。

▼パターンB:割り算で余りがある場合


[root@mnakamura shellscript]# sh caluculate.sh
数字1を入力して下さい。 : 15

数字2を入力して下さい。 : 2

足し算の結果は 17 です。
引き算の結果は 13 です。
掛け算の結果は 30 です。
割り算の結果は 7 で、余りは 1 です。

ポイント:readコマンドのオプションを[-p]のみにしたので、
今回はエコーバックが分かります。
尚、計算結果は演算子を使用して導いていますが、
小数点の計算は出来ません。

 

③カレントディレクトリのファイル数とディレクトリ数を表示する
▼現在のディレクトリの中身を確認


[root@mnakamura shellscript]# ll -a
合計 24
drwxr-xr-x 3 root root 4096 3月 30 16:31 2021 .
drwxr-xr-x 4 root root 4096 3月 28 14:07 2021 ..
-rw-r--r-- 1 root root 0 3月 28 16:03 2021 aaa.txt
-rw-r--r-- 1 root root 0 3月 28 16:04 2021 bbb.txt
-rw-r--r-- 1 root root 413 3月 30 16:31 2021 caluculate.sh
drwxr-xr-x 2 root root 4096 3月 28 16:04 2021 cccDIR
-rw-r--r-- 1 root root 685 3月 28 16:43 2021 currentdir.sh
-rw-r--r-- 1 root root 391 3月 30 16:27 2021 word.sh

■シェルの中身


[root@mnakamura shellscript]# cat currentdir.sh
#!/bin/bash
echo "このディレクトリ内のディレクトリの総数は"
find . -type d | wc -l
echo "で、ファイルの総数は"
find . -type f | wc -l
echo "です。"
echo

function yesorno {
while true; do
echo -n "$* [y/n]: "
read ANS
case $ANS in
[Yy]*)
return 0
;;
[Nn]*)
return 1
;;
*)
echo "yかnのどちらかを入力して下さい"
;;
esac
done
}
echo
if yesorno "内容まで表示しますか?"; then
echo
echo "ディレクトリの内容は"
find . -type d
echo "ファイルの内容は"
find . -type f
echo "です。"
else
echo
echo "終了します。"
fi

▼パターンA:総数だけ表示


[root@mnakamura shellscript]# sh currentdir.sh
このディレクトリ内のディレクトリの総数は
2
で、ファイルの総数は
5
です。

内容まで表示しますか? [y/n]: n

終了します。

▼パターンB:追加で内容まで表示


[root@mnakamura shellscript]# sh currentdir.sh
このディレクトリ内のディレクトリの総数は
2
で、ファイルの総数は
5
です。

内容まで表示しますか? [y/n]: y

ディレクトリの内容は
.
./cccDIR
ファイルの内容は
./word.sh
./caluculate.sh
./aaa.txt
./bbb.txt
./currentdir.sh
です。

▼パターンC:選択肢でyとn以外を入力した場合


[root@mnakamura shellscript]# sh currentdir.sh
このディレクトリ内のディレクトリの総数は
2
で、ファイルの総数は
5
です。




内容まで表示しますか? [y/n]: a
yかnのどちらかを入力して下さい
内容まで表示しますか? [y/n]: b
yかnのどちらかを入力して下さい
内容まで表示しますか? [y/n]: c
yかnのどちらかを入力して下さい
内容まで表示しますか? [y/n]: n

終了します。

ポイント:findコマンドとwcコマンドを利用してファイルの総数を出力。
lsコマンド等を利用する方法もあります。
ファイル数が極端に多い場合は内容まで出力せず、
ファイル数が少ない場合は上記のように内容まで追加で確認可能…
な感じにしてみました。

とりあえず今回はこんなところで…シェルスクリプトは色々な便利機能を自分で作成出来るので、
また機会があったらいくつかご紹介したいと思います。それではまたお会いしましょう。

 

■この記事を書いた人

mnakamura

株式会社ネットアシスト

髪の毛を切るタイミングを見失ったアラサーのおじさん。
最近PS5を購入。