7
6

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 5 years have passed since last update.

ShellScriptの基本

Last updated at Posted at 2016-05-04

変数

hoge="Test"

echo $hoge
echo ${hoge}
echo "$hoge"
echo '$hoge'
  • =にスペースを入れない
  • ダブルクォートは変数が展開される
  • シングルクォートは変数が展開されない

数値演算

x=10
echo `expr $x + 2`
echo `expr $x - 2`
echo `expr $x \* 2`
echo `expr $x / 2`
echo `expr \( $x + 5 \) \* 2`
  • exprを使う
  • バッククォートで囲む
  • アスタリスクと括弧はエスケープが必要

配列

a=(2 4 6)
echo ${a[1]}

# 全ての要素を表示
echo ${a[@]}
# 要素の数を表示
echo ${#a[@]}

a[2]=10

# 要素の追加
a+=(20 30)
  • 添字の場合かならず中括弧で囲む
  • 代入の際は中括弧不要

条件式

  • echo $? で直前のコマンドの戻り値を確認できる
  • test の動作確認等に活用可能

数値

num1=1
num2=2

# ==(equal)
test num1 -eq num2
# !=(not equal)
test num1 -ne nume
# >(greater than)
test num1 -gt nume
# >=(greater than or equal)
test num1 -ge nume
# <(less than)
test num1 -lt nume
# <=(less than or equal)
test num1 -le nume

文字列

str1="hoge"
str2="huga"
# =(equal)
test str1 = str2
# !=(not equal)
test str1 != str2

条件分岐

if

x=70
if [ $x -gt 60 ]; then
  echo "great!"
elif [ $x -gt 40 ]; then
  echo "success"
else
  echo "fail"
fi
  • []はtestコマンドの代替(半角スペース必要)

case

signal="red"
case $signal in
  "red")
    echo "stop!"
    ;;
  "yellow")
    echo "caution!"
    ;;
  "green")
    echo "go!"
    ;;
  *)
    echo "..."
    ;;
esac
  • 処理の終了は;;で表す

ループ

while

i=0
while :
do
  i=`expr $i + 1`

  if [ $i -eq 3 ]; then
    continue
  fi

  if [ $i -gt 10 ]; then
    break
  fi

  echo $i
done
  • 処理の継続はcontinue
  • ループの離脱はbreak

for

a=(1 2 3 4 5)
for i in ${a[@]}
do
  echo $i
done

seq

seqを利用すると1~100のような場合に楽

for i in `seq 1 100`
do
  echo $i
done

特殊変数、コマンド引数

# プログラム名
echo $0
# 第1引数
echo $1
# 第2引数
echo $2
# 第10引数
echo ${10}
# 全ての引数
echo $@
# 引数の数
echo $#
# 直前のコマンドの実行結果
echo $?

使い方

./hoge.sh arg1 arg2

対話処理

readを使う

while :
do
  read key
  echo "you pressed $key"
  if [ $key = "end" ]; then
    break
  fi
done

選択肢形式

selectを使う

select option in HOGE HUGA
do
  echo "you pressed $option"
  break
done

ファイル読み込み

引数で与えられたファイルを1行ずつ読み込む

while read line
do
  echo $line
done < $1

関数

function hello() {
  echo $1
  local i=1
  echo $i
}

# 関数呼び出し
hello hoge
  • function は省略可能
  • 変数はlocalをつけないとグローバルスコープになる
  • 引数は特殊変数で扱う

参考

7
6
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
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?