Linuc102メモ⑨シェルとスクリプト

環境変数とシェル変数

変数は環境変数とシェル変数に分けることが出来る。

環境変数

シェル自身と、そのシェルから起動されるすべてのプロセスで有効となる変数。

シェル変数

そのシェルのみ有効な変数。
exportコマンドを使用することで環境変数になる。

env、printenv

設定されている環境変数が表示される。

set

設定されている環境変数とシェル変数を表示。
set [-o][+o] [オプション]

set -o noglob メタキャラクタを使ったファイル展開を無効化。
無効化すると↓の通り検索してもマッチしなくなる。

[root@CentOS7 etc]# ls *.conf
GeoIP.conf                  kdump.conf      pbm2ppa.conf
asound.conf                 krb5.conf       pnm2ppa.conf
autofs.conf                 ksmtuned.conf   radvd.conf
autofs_ldap_auth.conf       ld.so.conf      request-key.conf
brltty.conf                 libaudit.conf   resolv.conf
cgconfig.conf               libuser.conf    rsyncd.conf

[root@CentOS7 etc]# set -o noglob
[root@CentOS7 etc]# ls *.conf
ls: *.conf にアクセスできません: そのようなファイルやディレクトリはありません

alias

bashではエイリアス機能を利用することで、コマンドに別名つけたり、コマンドとオプションをひとまとめにしたりできる。

[root@CentOS7 etc]# alias ls='ls -l'
[root@CentOS7 etc]# ls
合計 2828
-rw-r--r--   1 root root      5090 1116  2020 DIR_COLORS
-rw-r--r--   1 root root      5725 1116  2020 DIR_COLORS.256color
-rw-r--r--   1 root root      4669 1116  2020 DIR_COLORS.lightbgcolor
-rw-r--r--.  1 root root        94  324  2017 GREP_COLORS
-rw-r--r--.  1 root root      1704  812  2019 GeoIP.conf
drwxr-xr-x.  8 root root       145  69  2021 NetworkManager
drwxr-xr-x.  2 root root        92  49 04:15 PackageKit
drwxr-xr-x.  2 root root        25  49 04:14 UPower
drwxr-xr-x.  6 root root       103  49 04:13 X11
drwxr-xr-x.  3 root root       101  49 04:14 abrt

unaliasで解除できる。
また、\(バックスラッシュ)で一時的に無効化してコマンドを実行できる。

関数の定義 function

functionコマンドを使うと、bashシェル上で使える独自コマンドを定義できる。

 bashの設定ファイル

全ユーザー

  • /etc/profile  ログインに実行され、全ユーザから参照される。(環境変数、シェル変数にかかわるもの)

  • /etc/bash.bashrc 【Debian系】bash実行時に起動させたい処理(エイリアスなど)

  • /etc/bashrc 【Redhat系】bash実行時に起動させたい処理(エイリアスなど)

シェルスクリプト

シェルスクリプトの基礎

シェルスクリプトをテキストで作成
拡張子は.sh

[root@CentOS7 bin]# cat test.sh
echo "Hello,ken"

実行コマンドはbash、source
そして、「 . 」

[root@CentOS7 bin]# bash test.sh
Hello,ken
[root@CentOS7 bin]# source test.sh
Hello,ken
[root@CentOS7 bin]# . test.sh
Hello,ken

スクリプトに引き渡す引数

$0 シェルスクリプトのファイル名
$1 1番目の引数
$2 1番目の引数 以下$3、$4、$n
$# すべての引数の数
$@ すべての引数(スペース区切り)

①スクリプトファイル作成

[root@CentOS7 bin]# cat testsch
echo $0
echo $1
echo $2
echo $#  #引数の数 
echo $@ 

②スクリプトファイル実行

[root@CentOS7 bin]# . testsch aaa bbb
bash
aaa
bbb
2
aaa bbb 

実行結果の戻り値

コマンドを実行すると、終了時にシェルに対して戻り値を返します。
正常終了なら0
異常終了なら2

[root@CentOS7 bin]# ls zipnote
zipnote
[root@CentOS7 bin]# echo $?
0
[root@CentOS7 bin]# ls zipnote2
ls: zipnote2 にアクセスできません: そのようなファイルやディレクトリはありません
[root@CentOS7 bin]# echo $?
2

if文による条件分岐

test.txtがあれば表示して、なければ「test.txt not found」と表示するスクリプト。

if test -f test.txt
 then
  cat test.txt
 else
  echo "test.txt not found"
fi

Case文による条件分岐

式の値に応じて複数に分岐する場合に利用する。

[root@CentOS7 bin]# cat casetest1.sh
case $1 in
        1) echo "Yes" ;;
        2) echo "No" ;;
esac
[root@CentOS7 bin]# bash casetest1.sh 2
No

for文による繰り返し処理

繰り返し処理を行う場合には、for文を用いる。
指定した変数(var)にリストの文字列(Linuc1 Linuc2 Linuc3)を代入していく。

[root@CentOS7 bin]# cat fortest1.sh
for var in Linuc1 Linuc2 Linuc3
do
 echo $var test
done
[root@CentOS7 bin]# bash fortest1.sh
Linuc1 test
Linuc2 test
Linuc3 test

seqコマンド

連続した数値を自動生成できるので、リストの作成が楽チンに♪

[root@CentOS7 bin]# cat seqtest.sh
for i in `seq 1 5`
do
 echo $i
done
[root@CentOS7 bin]# bash seqtest.sh
1
2
3
4
5

While文による繰り返し処理

条件文が満たされていた場合、doとdoneの間の実行分を実行する。

[root@CentOS7 bin]# cat whiletest.sh
i=1
while [ $i -le 5 ]
do
 echo $i
 let i=i+1
done
[root@CentOS7 bin]# bash whiletest.sh
1
2
3
4
5

参考動画


この記事が気に入ったらサポートをしてみませんか?