シェルスクリプトについて
Qiita初心者なので読みづらいとか見づらいとかは許してね!
そもそもshellって何?って方はかんたんにまとめたのがあるのでどうぞ!(shellについて)
色々自動化していけたらなと思い、とりあえずシェルスクリプトをやろうとのことで調べたことをまとめようと思いまーす!
環境:ubuntu18.04
とりあえず色々調べたら '#!/bin/sh'とか '#!/bin/bash'とかが一行目にあるのでそれについてまとめまーす!
#!/bin/sh
と #!/bin/bash
#!/bin/sh
と#!/bin/bash
(shebang)はシステムにこれからシェルスクリプトを書きますようと知らせるもの!
#!/bin/sh
は実行環境によってシンボリックリンクが違うのでbashなら#!/bin/bash
と明示!
基本設定
シェルスクリプトのファイルは基本的に拡張子が.sh
テストとしてtest.sh
を作成!
#!/bin/bash
これが基本でこのあとにシェルさんを書いていくみたい!
実行するときはこれ!
bash test.sh
sh test.sh
chmod 755 test.sh
./test.sh
基本コマンド
コメントアウト
シェルさんは#
でコメントアウトできる!
#!/bin/bash
#わーーーーーーーーーーーーーーーーーーーーーーーーーーーーーい!
#なんもなーーーーーーーーーーーーーーーーーーーーーーーーーーい!
入出力
入力はread
で出力はecho
!
#!/bin/bash
read STR
echo "Hello $STR !"
-------------------
bash test.sh
World
Hello World !
変数
シェルスクリプトも他のプログラミング言語と同じで変数を使える!
シェルスクリプト内の変数はシェル変数って言って=で使える!
※文字列は" "
で囲まないとダメ!!
シェル変数を使うときは$変数
か${変数}
で使える!
readonly 変数
で変数の中身を変更できなくする!
unset
で変数を消せる
※readonlyしたら消せない!
#!//bin/bash
val1="Hello"
val2="World"
val3=14
echo ${val1} ${val2}
echo age : ${val3}
readonly val3
val3=15
-------------------
bash test.sh
Hello World
age : 14
test.sh: 12: test.sh: val3: is read only
特別な変数
シェルスクリプトには特別な変数があるみたい!
変数名 | 機能 |
---|---|
$0 | スクリプト名 |
$1〜$9 | 1番目の引数を$1 、2番目の引数を$2 でアクセスする |
$# | スクリプトに与えた引数の数 |
$* | 全部の引数をまとめて1つとして処理 |
$@ | 全部の引数を個別として処理 |
$? | 直前実行したコマンドの終了値(0は成功、1は失敗) |
$$ | このシェルスクリプトのプロセスID |
$! | 最後に実行したバックグラウンドプロセスID |
#!/bin/bash
echo "\$0 : $0"
echo "\$1 : $1"
echo "\$2 : $2"
echo "\$* : $*"
echo "\$\@ : $@"
echo "\$\# : $#"
val="/$/?は0のはず"
echo "\$\? : $?"
----------------------
bash test.sh
$0 : test.sh
$1 : a
$2 : b
$* : a b c
$@ : a b c
$# : 3
$? : 0
特殊な文字
* ? [ ' " ` \ $ ; & ( ) | ~ < > # % = スペース タブ 改行
はシェルスクリプトの特殊文字だから文字列として使うときは \
を書いてからじゃないとダメ!
変数値の置換
文法(例) | 説明 |
---|---|
${val} | valの値 |
${val:-test} | valに何も入っていなければtestを返す!※valはそのまま! |
${val:+test} | valに何か入っていればtestを返す!※valはそのまま! |
${val:?Error} | valに何も入ってなければErrorを返す! |
${val:=hoge} | valに何も入ってなければhogeを返す!※valの値はhogeに! |
#!/bin/bash
echo "1 ${val:-test}"
echo "2 ${val}"
echo "3 ${val:+test}"
echo "4 ${val}"
echo "5 ${val:=hoge}"
echo "6 ${val}"
echo "7 ${val:+test}"
echo "8 ${val}"
echo "9 ${val:?Error}"
echo "10 ${val}"
------------------------------
bash test.sh
1 test
2
3
4
5 hoge
6 hoge
7 test
8 hoge
9 hoge
10 hoge
valとかtestとかの名前は何でも大丈夫!
配列
#!/bin/bash
arrey=(first second 3rd 4th)
array[0]="one"
array[3]="four"
echo "array[0] : ${array[0]}"
echo "array[3] : ${array[3]}"
------------------------------
bash test.sh
array[0] : one
array[3] : four
array[*]かarray[@]で配列のすべての中身をアクセスする!
演算等
shellで演算するときは`expr 数字 演算子 数字`
って書く!
演算子 | 意味 | 使い方 |
---|---|---|
+ | 和 | `expr 5 + 5` |
- | 差 | `expr 10 - 5` |
¥* | 積 | `expr 5 * 5` |
/ | 除 | `expr 10 / 2` |
% | 除余り | `expr 10 % 3` |
= | 指定 |
a=$b aにbの値を代入 |
== | 真 | ["$a"=="$b"]aとbが同値ならtrueを返す! |
!= | 偽 | ["$a"!="$b"]aとbの値が違うとtrueを返す! |
比較 | 意味 | 使い方 |
---|---|---|
-eq | イコール |
["$a" -eq "$b" ]$a と$b が同じならtureを返す! |
-ne | ノットイコール |
["$a" -ne "$b" ]$a と$b が違えばtureを返す! |
-gt | 大なり |
["$a" -gt "$b"]$a が$b より大きければtureを返す! |
-lt | 小なり |
["$a" -lt "$b"]$a が$b より小さければtureを返す! |
-ge | 大なりイコール |
["$a" -ge "$b"]$a が$b 以上ならtureを返す! |
-le | 小なりイコール |
["$a" -le "$b"]$a が$b 以下ならtureを返す! |
! | ノット |
[! "$a" -ge "$b"]$a が$b 以上じゃなければtureを返す! |
-o | or |
["$a" -eq "$b" -o "$c" -eq "$d"]$a と$b の値が同じか$c と$d の値が同じならtureを返す! |
-a | and |
["$a" -eq "$b" -a "$a" -eq "$c"]$a と$b の値が同じで$a と$c の値が同じならtureを返す! |
-z | 文字列が空か |
[-z "$a"]$a の中身が空ならtureを返す! |
-n | 文字列が空か |
[-n "$a"]$a の中身に何か入っているならtureを返す! |
※[ ]
内に変数を使うときは" "
で囲むように!
※[ ]
のやつは条件分!(ifとかwhileとかの)
if
Author And Source
この問題について(シェルスクリプトについて), 我々は、より多くの情報をここで見つけました https://qiita.com/maachan_9692/items/ed4a99e0a1fb04c47c19著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .