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 11月 16 2020 DIR_COLORS
-rw-r--r-- 1 root root 5725 11月 16 2020 DIR_COLORS.256color
-rw-r--r-- 1 root root 4669 11月 16 2020 DIR_COLORS.lightbgcolor
-rw-r--r--. 1 root root 94 3月 24 2017 GREP_COLORS
-rw-r--r--. 1 root root 1704 8月 12 2019 GeoIP.conf
drwxr-xr-x. 8 root root 145 6月 9 2021 NetworkManager
drwxr-xr-x. 2 root root 92 4月 9 04:15 PackageKit
drwxr-xr-x. 2 root root 25 4月 9 04:14 UPower
drwxr-xr-x. 6 root root 103 4月 9 04:13 X11
drwxr-xr-x. 3 root root 101 4月 9 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