注意事項

スペースの有無でエラーになったりするので注意 たとえばif文は

if [ $# -ne 2 ]; then
if [ $# -ne 2]; then

引数の処理

デフォルト値の設定

ARG1=${1:-hoge}

引数を取得

引数は順番に$1,$2,$3・・・・と取得できる

echo $1

4番目以降の引数を一気に取得

VARIABLE_ARGS=${@:4}

コマンド引数チェック

# nullだったら実施するパターン
if [ ! $1 ]; then
	echo "PLEASE INPUT ARGUMENTS!"
fi;
if [ $# -ne 2 ]; then
       echo "利用方法 $0 引数1 引数2"
       exit
fi

変数の長さ

${#変数名}

繰り返し処理

繰り返し処理 基本

for FILE in a b c
do
 echo ${FILE}
done

繰り返し処理 コマンド実行結果

TARGET_FILES=`ls *`
for FILE in ${TARGET_FILES}
do
 echo ${FILE}
done
#こっちのほうが楽?
for textfile in $( ls . ); do
  echo "${textfile}"
done

ファイルを読み込んで繰り返し(catはメモリ食うのでNG)

while read x; do
  echo $x
done < $1

繰り返し処理応用バージョン ファイルの中身を読み込んで処理

for filename in `cat ファイル名`
do
       echo $filename
done
while read line ; do
 echo ${line}
done < ファイル名

if文

 if [ -f $RESULT ]; then
   echo "TRUE" 
 else
   echo "FALSE"
 fi;
 if [ -f $RESULT ]; then
   echo "TRUE" 
 elif [ 条件 ]; then
   echo "FALSE"
 else
   echo "FALSE"
 fi;
if [ $STR = "比較対象" ]; then
if [ -f $RESULT ]; then
PRE_RESULT=`cat $RESULT`
fi;
if [ ! -f $RESULT ]; then
    PRE_RESULT=`cat $RESULT`
fi;
if [ -z "${WEBAPPS}" ]; then
  echo "変数が空です"
fi
if [ ! -d "/var/tmp" ]; then
   echo "/var/tmp does not exist!" 
   return
fi
if [ ! -d "/var/tmp" -o ! -d "/var/tmp2" ]; then
   echo "/var/tmp or /var/tmp2 do not exist!" 
   return 1
fi

case文

#!/bin/bash
# read key input from stdin
read key
# do command
case "$key" in
   "1" ) echo "statement1"
         echo "statement2";;
   "2" ) echo "end sign is ;;";;
   *) echo "一致するものがないときはここ"
         break ;;
esac

コマンドを実行してリターンコードの判定例

ls hoge
if [ $? -ne 0 ]; then
   echo "ERROR!!"
   exit
fi;

関数(サブルーチン、プロシージャ)の定義

# 引数は$1,$2でつかえる。呼び出し前に定義しておく必要がある。
doCheck() {
       echo $1
}
# 呼び出しは関数名と引数をスペース区切りで
doCheck hogehogehoge fugafuga

source ./function.sh

応用編(上記の合わせ技)

#!/bin/sh
SRC_DIR=$1
DST_DIR=$2
LIST=$3
if [ -z "$1" -o  -z "$2" -o -z "$3" ]; then
  echo "コピー元、コピー先、ファイル名の引数のいずれかが空です。"
  exit 1
fi
while read line ; do
 DIR_NAME=`dirname ${line}`
 if [ ! -e "${DST_DIR}${DIR_NAME}" ]; then
   mkdir -p ${DST_DIR}${DIR_NAME}
 fi
 FILE_NAME=`filename ${line}`
 
 echo cp ${SRC_DIR}${line} ${DST_DIR}${line}
done < ${LIST}

その他

ファイルに日付時刻の接尾語をつける。

SUFFIX=` date '+%Y%m%d%H%M%S'`
echo "TEST" > hoge_${SUFFIX}
date '+%Y-%m-%d %H:%M:%S'
Counter: 10522, today: 1, yesterday: 0

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-10-14 (金) 13:16:52