Linux / Tips / sh01



ファイル、ディレクトリのバックアップ

説明

  • ファイルもディレクトリも同様にバックアップ
    • 引数が2つでsource, destの指定
    • 引数が1つでバックアップファイル名がsource.bkと勝手に名付ける。
  • mvしてるんで元ファイル消します。てことはバックアップじゃないな。cpにして。

コード

#!/bin/sh
BackupFile() {
    case ${#} in
        1)
            SOURCE=${1}
            DEST=${1}.bk
            ;;
        2)
            SOURCE=${1}
            DEST=${2}
            ;;
        *)
            return 1
    esac

    if [ -f "${SOURCE}" -o -d "${SOURCE}" ]
    then
        if [ -f "${DEST}" -o -d "${DEST}" ]
        then
            rm -fr ${DEST}
        fi
        mv ${SOURCE} ${DEST}
    fi
    return 0
}

利用例

$ BackupFile "/home/down/aaa/"   ←/home/down/aaa.bk/ ができる

文字列の取得


キーセンテンスの次の1単語を取得

コード

# aaa bbb ccc の次の1単語を表示
TEXT='aaa bbb ccc ddd eee fff'
KEY='bbb ccc'
KEYCOUNT=`echo "${KEY}" | wc -w`

echo "${TEXT}" | \
  sed -e "s/.*${KEY}/${KEY}/g" | \
  awk '{print $'`expr "${KEYCOUNT}" + 1`'}'

出力

ccc

キーセンテンス以降から末尾までを表示

コード

# bbb ccc の次から末尾までを表示
TEXT='aaa bbb ccc ddd eee fff'
KEY="bbb ccc"
echo "${TEXT}" | sed -e "s/.*${KEY}[ \t]//g"

出力

ddd eee fff

まとめ

#!/bin/sh

# \brief get the next word of keyword('_KEY') in text('_TEXT').
# \param ${1} _TEXT text
# \param ${2} _KEY keyword
# \retval none(do not scan args)
# \remark this function return text.
GetNextWord() {
  _TEXT="${1}"
  _KEY="${2}"
  _KEYCOUNT=`echo "${KEY}" | wc -w`

  echo "${_TEXT}" \
    | sed -e "s/.*${_KEY}/${_KEY}/g" \
    | awk '{print $'`expr "${_KEYCOUNT}" + 1`'}'
}

# \brief get the next word"s" of keyword('_KEY') in text('_TEXT').
# \param ${1} _TEXT text
# \param ${2} _KEY keyword
# \retval none(do not scan args)
# \remark this function return text.
GetNextWords() {
  _TEXT="${1}"
  _KEY="${2}"
  echo "${_TEXT}" | sed -e "s/.*${_KEY}[ \t]//g"
}

TEXT='aaa bbb ccc ddd eee fff'

# aaa bbb ccc の次の1単語を表示
KEY="bbb ccc"
GetNextWord "${TEXT}" "${KEY}"

# bbb ccc の次から末尾までを表示
KEY="bbb ccc"
GetNextWords "${TEXT}" "${KEY}"

MenuBar


最新の20件

2015-05-15 2014-12-07 2008-11-17 2007-08-30 2007-04-21 2007-03-13 2007-03-12 2007-02-20 2007-02-14 2007-02-04 2006-11-26 2006-11-23 2006-11-20 2006-11-18 2006-11-13

  • counter: 508
  • today: 1
  • yesterday: 0
  • online: 1