3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめに

Linux初学者である自分向け用の記事です。[Udemyの動画講座]を参考にしました。
僕の勉強法は動画を見る実際に動かしてみる問題演習という流れです。

前回まで:[Linux入門 2-1]


2. シェルスクリプト(問題、テスト、演習、発展問題)

2-5. 数値計算
[test@... basic]$ cat base9.sh
#!/bin/bash
echo 1 + 1
echo $(( 1 + 1 ))
echo $(( 10 / 6 ))
echo -------------
num1=10
num2=20
echo $(( num1 + num2 ))


[test@... basic]$ ./base9.sh 
1 + 1
2
1
-------------
30

割り算に関してはint型で処理されるため、小数点以下は表示されない。
変数を使うときは$を使わない。(つまり、以下のようにしないこと)

#!/bin/bash
num1=1
num=2
echo $(( $num1 + $num2 ))
2-6. 関数

なお、小数点以下の計算にはbcコマンドをインストールする必要がある。
bcコマンドは、小雨数店以下の数値を扱うだけでなく、四則演算・平方根・三角関数などさまざまな関数の計算を実施できる。

//rootユーザーにてインストールを実施
[root@ ~]# yum install bc
Loaded plugins: fastestmirror, ovl
...

以下にて、関数などを使用した計算を実施する。
ファイルの権限だが、.shファイルを実施できるように実行権限を付与する。

//変更前
[test@d45c56c52f45 basic]$ ls -la
-rw-rw-r-- 1 test test   31 Nov 20 07:24 base10.sh
//変更後
[test@d45c56c52f45 basic]$ chmod 755 base10.sh 
[test@d45c56c52f45 basic]$ ls -la
-rwxr-xr-x 1 test test   31 Nov 20 07:24 base10.sh

ファイルの中身と実行結果

[test@ basic]$ cat base10.sh 
#!/bin/bash
echo "20.5+5" | bc
echo "scale=10;2/3" | bc -l
echo "scale=5;sqrt(18/2)" | bc -l

[test@ basic]$ ./base10.sh 
25.5
.6666666666
3.00000

bcコマンドを使いたいときは、echo "20.5+5" | bcのように|でつないで実行したいコマンドを記載すればよい。
ちなみに、|は標準出力の結果を右のコマンドに渡すの意味。

2-7. Case文、ループ文(for, while, until)
case

case文とは、ある変数の値を評価して、値に応じて処理を変える。
ex1)

ファイルの中身
[test@ basic]$ ./base11.sh red
STOP
[test@ basic]$ cat base11.sh 
#!/bin/bash
var=$1
case $var in
  'blue')
    echo 'GO';;
  'red')
    echo 'STOP';;
  'yellow')
    echo 'waiting...';;
esac
実行結果
[test@d45c56c52f45 basic]$ ./base11.sh red
STOP
[test@d45c56c52f45 basic]$ ./base11.sh yellow
waiting...

ex2)

ファイルの中身
[test@d45c56c52f45 basic]$ cat base11b.sh 
#!/bin/bash
var=$1
case $var in
  [a-z])
    echo 'a-z';;
  [A-Z])
    echo 'A-Z';;
  [0-9])
    echo '0-9';;
esac
実行結果
[test@ basic]$ ./base11b.sh S
A-Z
[test@ basic]$ ./base11b.sh m
a-z
[test@ basic]$ ./base11b.sh 2
0-9
while

ex)文字の場合

ファイルの中身
[test@ basic]$ cat base12.sh 
#!/bin/bash
#while
read -p 'input : ' var
while [ $var != 'exit' ];
do
  echo 'input_is_' $var
  echo 'Please Write exit'
  read -p 'input : ' var
done
実行結果
[test@ basic]$ ./base12.sh 
input : udemy
input_is_ udemy
Please Write exit
input : aaa
input_is_ aaa
Please Write exit
input : exit

ex)数値の場合

ファイルの中身
[test@ basic]$ cat base12-i.sh 
#!/bin/bash
#while int
n=0
while (( $n < 5 ));
do
  echo $n
  echo 'Please wait seconds...'
  sleep 1
  n=$(( n + 1 ))
done
exit 0
実行結果
[test@ basic]$ ./base12-i.sh 
0
Please wait seconds...
1
Please wait seconds...
2
Please wait seconds...
3
Please wait seconds...
4
Please wait seconds...

数値でwhile文を使うときはwhile (( $n < 5 ));と記述する。
sleep関数を入れると、出力まで時間をdelayすることができる。

break
ファイルの中身
[test@ basic]$ cat base12-b.sh 
#!/bin/bash
#while int
n=0
while (( $n < 5 ));
do
  echo $n
  echo 'Please wait seconds...'
  sleep 1
  if [ $n -eq 2 ];
  then
    break
  fi
  n=$(( n + 1 ))
done
exit 0
実行結果
[test@ basic]$ ./base12-b.sh 
0
Please wait seconds...
1
Please wait seconds...
2
Please wait seconds...
continue
ファイルの中身
[test@ basic]$ cat base12-b.sh 
#!/bin/bash
#while int
n=0
while (( $n < 5 ));
do
  echo $n
  echo 'Please wait seconds...'
  sleep 1
  if [ $n -eq 2 ];
  then
    continue
  fi
  n=$(( n + 1 ))
done
exit 0
実行結果
[test@ basic]$ ./base12-b.sh 
0
Please wait seconds...
1
Please wait seconds...
2
Please wait seconds...
2
Please wait seconds...
2
Please wait seconds...
2
Please wait seconds...
2
Please wait seconds...
^C
ファイルからの読み込み

読み込み用のファイルを作成

[test@ basic]$ cat sample.txt 
1
2
3
4
5
ファイルの中身
[test@ basic]$ cat base13.sh 
#!/bin/bash
cat 'sample.txt' | while read txt;
do
  echo $txt
  sleep 0.5
done
exit 0
実行結果
[test@ basic]$ ./base13.sh 
1
2
3
4
5
for文

2つ飛ばしでカウントしていく場合。

ファイルの中身
[test@ basic]$ cat base14.sh 
#!/bin/bash
for i in `seq 1 2 10`
do
  echo $i
  sleep 0.5
done
実行結果
[test@ basic]$ ./base14.sh 
1
3
5
7
9

コマンドを実行する場合。

ファイルの中身
[test@d45c56c52f45 basic]$ cat base14c.sh 
#!/bin/bash
for cmd in ls pwd date
do
  echo $cmd
  $cmd
done
実行結果
[test@ basic]$ ./base14c.sh 
ls
base10.sh  base11b.sh	base12-i.sh  base13.sh	base14c.sh  sample.txt
base11.sh  base12-b.sh	base12.sh    base14.sh	base9.sh
pwd
/home/test/basic
date
Sat Nov 20 08:47:41 UTC 2021
ShellScriptのテスト2

Q1)数値の計算結果を変数に格納するさいの記載方法を次の中から選択してください
A1)

var=$(( 1 + 1 ))

計算結果を表すには$(( 計算 ))、もしくは$(expr 計算)です。

Q2)bcを用いた浮動小数点の計算方法について正しいものを選択してください
A2)

echo '1 + 1.5' | bc

bcの場合echoで標準出力の計算式を受け取ることで計算を実行します

Q3)case文の記載方法で正しいものを選択してください
A3)

var=$1
case $var in
  'blue')
    echo 'GO';;
esac 

case文の正しい記載方法です

Q4)while (( $var < 10 ))のとき、varの値がどの値のときwhileの中の処理が実行されるでしょうか?
A4)
9

Q5)以下のスクリプトは何と表示されるでしょうか

#!/bin/bash
for i in `seq 1 10`
do
        if [ $i -eq 3 ];
        then
                continue
        elif [ $i -eq 8 ];
        then
                break
        fi
        echo $i
done 

A5)

1
2
4
5
6
7

3がcontinue飛ばされ、8でループを抜けるため、1 2 4 5 6 7が表示されます

演習問題

Q)Fizz Buzz問題
・1-100までループする
・数値が3の倍数のときは数値:Fizzと表示
・数値が5の倍数のときは数値:Buzzと表示
・数値が15の倍数のときは数値:FizzBuzzと表示
・上の条件を満たさないときは数値のみを表示
・forを利用して作成する。
A)

[test@d45c56c52f45 3]$ cat for.sh 
#!/bin/bash
for i in `seq 1 1 100`;
do
  if [ $(( i % 3 )) -eq 0 ] && [ $(( i % 5 )) -eq 0 ];
  then
    echo $i 'FizzBuzz'
  elif [ $(( i % 3 )) -eq 0 ];
  then
    echo $i 'Fizz'
  elif [ $(( i % 5 )) -eq 0 ];
  then
    echo $i 'FizzBuzz'
  else
    echo $i
  fi
done
exit 0
select文
ファイルの中身
[test@ basic]$ cat base15.sh 
#!/bin/bash
select var in apple banana lemon exit
do
  if [ -z $var ];
  then
    continue
  fi
  echo $var
  if [ $var = 'exit' ];
  then
    break
  fi
done
echo 'select end'
実行結果
[test@ basic]$ ./base15.sh 
1) apple
2) banana
3) lemon
4) exit
#? 3
lemon
#? 4
exit
select end

To Be Continued...
[Linux入門 2-3]



[Linux Professional Institute公式HP]:https://www.lpi.org/ja/our-certifications/lpic-1-overview
[Udemy]:https://udemy.benesse.co.jp/career/workstyle/lpic-interview-company.html
[Udemyの動画講座]:https://www.udemy.com/course/linuxlpic/?utm_source=bene-content-marketing&utm_campaign=normal&utm_content=story&utm_term=career&utm_medium=udemyads
[Linux入門 2-1]:https://qiita.com/hoglet/items/7499f91e7ab9e99ce006
[Linux入門 2-3]:

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?