LoginSignup
0
0

シェルスクリプト

Posted at

シェル変数の作成

ubuntu
reiji@utm-ubuntu:~/practice/shellscript$ apple=リンゴ
reiji@utm-ubuntu:~/practice/shellscript$ echo apple //そのまま文字列として出力
apple
reiji@utm-ubuntu:~/practice/shellscript$ echo $apple
リンゴ

環境変数の作成

ubuntu
reiji@utm-ubuntu:~/practice/shellscript$ export apple //値が入っていない環境変数apple
reiji@utm-ubuntu:~/practice/shellscript$ export orange=みかん

変数の更新

ubuntu
reiji@utm-ubuntu:~/practice/shellscript$ melon=メロン
reiji@utm-ubuntu:~/practice/shellscript$ echo $melon
メロン
reiji@utm-ubuntu:~/practice/shellscript$ read $melon
-bash: read: `メロン': not a valid identifier
reiji@utm-ubuntu:~/practice/shellscript$ read melon //$をつけないと修正できる
めろん
reiji@utm-ubuntu:~/practice/shellscript$ echo $melon
めろん

シェル変数の一覧表示

ubuntu
reiji@utm-ubuntu:~/practice/shellscript$ set | grep melon //一覧表示からのgrep
melon=めろん

シェル変数の削除

ubuntu
reiji@utm-ubuntu:~/practice/shellscript$ set | grep orange
orange=みかん
reiji@utm-ubuntu:~/practice/shellscript$ unset orange | grep orange //grepしても出てこず

環境変数の一覧表示

ubuntu
SHELL=/bin/bash
PWD=/home/reiji/practice/shellscript
LOGNAME=reiji
XDG_SESSION_TYPE=tty
orange=みかん
MOTD_SHOWN=pam
HOME=/home/reiji
LANG=en_US.UTF-8
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
SSH_CONNECTION=192.168.64.1 49444 192.168.64.4 22
apple=リンゴ
LESSCLOSE=/usr/bin/lesspipe %s %s
XDG_SESSION_CLASS=user
TERM=xterm-256color
LESSOPEN=| /usr/bin/lesspipe %s
USER=reiji
SHLVL=1
XDG_SESSION_ID=73
XDG_RUNTIME_DIR=/run/user/1000
SSH_CLIENT=192.168.64.1 49444 22
XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share:/usr/share:/var/lib/snapd/desktop
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
SSH_TTY=/dev/pts/1
OLDPWD=/home/reiji/practice
_=/usr/bin/env

環境変数の削除

ubuntu
reiji@utm-ubuntu:~/practice/shellscript$ env | grep apple
apple=リンゴ
reiji@utm-ubuntu:~/practice/shellscript$ unset apple
reiji@utm-ubuntu:~/practice/shellscript$ env | grep apple

引用符の違い

引用符
'' ただの文字列として出力
"" 変数として出力
`` コマンドとして実行
ubuntu
reiji@utm-ubuntu:~/practice/shellscript$ APPLE=リンゴ
reiji@utm-ubuntu:~/practice/shellscript$ echo 'APPLEの中身は$APPLE'
APPLEの中身は$APPLE
reiji@utm-ubuntu:~/practice/shellscript$ echo "APPLEの中身は$APPLE"
APPLEの中身はリンゴ

reiji@utm-ubuntu:~/practice/shellscript$ COMMAND=`date`
reiji@utm-ubuntu:~/practice/shellscript$ echo "今何時?今$COMMANDだよ。"
今何時?今Sat Mar 16 10:49:08 PM UTC 2024だよ。
reiji@utm-ubuntu:~/practice/shellscript$ echo "今何時?今`date`だよ。"
今何時?今Sat Mar 16 10:49:52 PM UTC 2024だよ。
reiji@utm-ubuntu:~/practice/shellscript$ 

引数

変数
$0 コマンド名
$1~ 引数の値
$# 引数の数
ubuntu
reiji@utm-ubuntu:~/practice/shellscript$ vi args.sh
reiji@utm-ubuntu:~/practice/shellscript$ cat args.sh
#!/bin/bash
echo '$1:' $1;
echo '$2:' $2;
echo '$3:' $3;
echo '$0:' $0;
echo '$#:' $#;
reiji@utm-ubuntu:~/practice/shellscript$ ./args.sh aaa bbb ccc //実行権限がなかった
-bash: ./args.sh: Permission denied
reiji@utm-ubuntu:~/practice/shellscript$ chmod u+x args.sh //ファイルにuserの実行権限を付与
reiji@utm-ubuntu:~/practice/shellscript$ ./args.sh aaa bbb ccc
$1: aaa
$2: bbb
$3: ccc
$0: ./args.sh
$#: 3
reiji@utm-ubuntu:~/practice/shellscript$ 

引数の順序をずらす shift

エスケープ

ubuntu
reiji@utm-ubuntu:~/practice/shellscript$ echo "APPLEの中身は$APPLE"
APPLEの中身はリンゴ
reiji@utm-ubuntu:~/practice/shellscript$ echo "APPLEの中身は"$APPLE""
APPLEの中身はリンゴ
reiji@utm-ubuntu:~/practice/shellscript$ echo 'APPLEの中身は"$APPLE"' //大外をシングルで囲う
APPLEの中身は"$APPLE"
エスケープ文字
¥n 改行

if文

if 条件式 1 then ... elif 条件式 2 ... else ... fi

image.png

AND条件

[条件 A -a 条件 B -a 条件 C ] ....
[条件 A] && [条件 B] && [条件 C] ...

OR条件

[条件 A -o 条件 B -o 条件 C ] ....
[条件 A] || [条件 B] || [条件 C] ...

ファイル属性の確認

if test -d パス ; then.....

image.png

switch文みたいな

case 変数 in
値 A)
処理 1;;
値 B)
処理 2;;

for文

for 変数 in 値のリスト
do
処理
done

while文とuntil文

※untiはwhileの逆で条件が一致していない間ループする。

while 条件式
do
処理
done
until 条件式
do
処理
done

select文

ユーザに入力を促す

select 変数 in リスト
do
処理
done
ubuntu
reiji@utm-ubuntu:~/practice/shellscript$ cat test-select
select name in "apple" "banana" "orange"
do
echo "You selected $name";
done
reiji@utm-ubuntu:~/practice/shellscript$ ./test-select.sh
1) apple
2) banana
3) orange
#? 2 //番号を選択する
You selected banana
#? ^C //Ctrl + c で終了
reiji@utm-ubuntu:~/practice/shellscript$ 

繰り返し制御 continueとbreak

while true
do
echo "Continue? (y/n)"
read input
case $input in
n) break
;;
y) continue
;;
*) echo "Please input y or n."
;;
esac
done

関数

function 関数名
{
 処理
}

関数名 ()
{
 処理
}
0
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
0
0