文字列の一部分を取り出したい
例1、変数pathの3バイト目から1バイトを変数flgに代入する。
path="/usr/bin"
flg = `echo $path | cut -c3`
echo $flg
実行するとpathの3バイト目の「s」が返る。
例2、変数pathの2バイト目から7バイトを変数flgに代入する。
path="/usr/bin"
flg = `echo $path | cut -c2-7`
echo $flg
実行すると「usr/bin」が返る。
文字列の数値チェック
例1、引数$1が数値のときnumericを、数値で無いときnot numericを表示する。
NUMERIC_CHECK=`echo "${1}" | awk '/[^0-9]/ {print}'`
if [[ ! -z $NUMERIC_CHECK ]]
then
echo "not numeric"
else
echo "numeric"
fi
文字列のバイト数を求める
例1、変数STRのバイト数を求め変数ANSに設定する。
ANS=`echo ${STR} | awk '{printf "%s",blength($0)}'`
例2、変数STRのバイト数を求め変数ANSに設定する。
ANS=`printf "${STR}" | wc -c`
例3、変数STRのバイト数を求め変数ANSに設定する。
STR="abcdefg hijklmn"
expr length "${STR}"
実行すると「15」が返る。
文字列の先頭から指定の文字が最初に現れた位置を返す
例、変数STRの先頭から「:」が最初に現れた位置を変数ANSに設定する。
ANS=`echo ${STR} | awk '{printf "%s",index($0,":")}'`
例、変数STRの先頭から「:」が最初に現れた位置を変数ANSに設定する。
STR='abcd:efg'
ANS=`expr index "${STR}" :`
文字列の先頭から指定の文字の現れる前までを返す
例、変数STRの1バイト目から空白が現れるまでの文字列を返す。
STR="abcdefg hijklmn"
echo $STR | awk '{ print substr($0,1,index($0," ")-1)}'
「abcdefg」が返る。
文字列の最後の文字を返す
例、変数STRの最後の文字を返す。
STR="abcdefg hijklmn"
echo ${STR} | awk '{printf "%s",substr($0,length($0),1)}'
「n」が返る。
例、変数STRの最後の文字を返す。
STR="abcdefg hijklmn"
echo ${STR} | cut -c`printf "${STR}" | wc -c`
「n」が返る。
例、変数STRの最後の文字を返す。
STR="abcdefg hijklmn"
echo ${STR} | cut -c`expr length "${STR}"`
「n」が返る。
文字列の先頭から最後−2バイトの文字を返す
例、変数STRの先頭から最後−2バイトの文字を返す。
STR="abcdefg hijklmn"
echo ${STR} | awk '{printf "%s",substr($0,1,length($0)-2)}'
「abcdefg hijkl」が返る。
文字列の最後から2バイトの文字を返す
例、変数STRの最後から2バイトの文字を返す。
STR="abcdefg hijklmn"
LEN=`expr length "${STR}"`
echo ${STR} | cut -c`echo "${LEN} - 1" | bc`-
「mn」が返る。
例、変数STRの最後から2バイトの文字を返す。
STR="abcdefg hijklmn"
echo ${STR} | cut -c$(echo "$(expr length "${STR}") - 1" | bc)-
「mn」が返る。
文字列の先頭と末尾の空白を取り除く
例、変数STRの文字列の先頭と末尾の空白を取り除く。
STR=" abcdefg "
printf "%s" ${STR}
「abcdefg」が返る。
前ゼロ
例、前ゼロ。
HH=1
MM=2
SS=3
printf "%.2d:%.2d:%.2d\n" ${HH} ${MM} ${SS}
「01:02:03」が出力される。
区切り文字で区切られた文字列のn番目のフィールドを返す
例、変数STRの区切り文字が「/」でn番目のフィールドを返す。
STR="abc/def/ghi/jkl"
echo ${STR} | awk -F/ '{print $NF}'
「jkl」が返る。
区切り文字で区切られた文字列のn番目のフィールド以外を返す
例、変数STRの区切り文字で区切られた文字列のn番目のフィールド以外を返す。
STR="/abc/def/ghi/jkl/mno"
echo ${STR} | awk -F/ '{for(i=2;i<NF;i++){printf "/%s",$i}printf "\n"}'
「/abc/def/ghi/jkl」が返る。
自分のコマンド名
自分のコマンド名
typeset -R27 MY_NAME=`basename $0`
計算
例1、「(1+2)*3」
ANS=`echo "(1+2)*3" | bc`
echo ${ANS}
実行するとANSに「9」が返る。
例2、「(a+b)*c」
a=1
b=2
c=3
ANS=`echo "($a+$b)*$c" | bc`
echo ${ANS}
実行するとANSに「9」が返る。
例3、「(1+2)*3」
(( ANS=(1+2)*3 ))
echo ${ANS}
実行するとANSに「9」が返る。
標準入力から変数へ代入する
read INPUTDATA
echo ${INPUTDATA}
一定サイズ以上のファイルを探す
例、1234バイト以上のファイルを全て表示する。
find / -size +1234c -print
何日か前に作成されたファイルを削除したい
例、カレントディレクトリ内のファイルで7日以上前に作成されたファイルを削除する。
for i in `find ./ -mtime +7`
do
if [[ -f ${i} ]]
then
rm ${i}
if [[ $? != "0" ]]
then
echo "削除エラー ${i}"
fi
fi
done
例、カレントディレクトリ内のファイルで7日以上前に作成されたファイルを削除する。(一行にしたもの)
find ./ -mtime +7 -exec rm {}\;
ファイルが存在するか?
例1、testを使う。
if test -f FileName
then
echo "有り"
else
echo "無し"
fi
例2、条件式を使う
if [ -f FileName ]
then
echo "有り"
else
echo "無し"
fi
例2、Kシェルの場合
if [[ -f FileName ]]
then
echo "有り"
else
echo "無し"
fi
テキストファイルの読み込み
例1、file.txtを一行ずつ変数DATAへ読込み表示する。
while read DATA
do
echo "${DATA}"
done < file.txt
例2、file.txtの空白行とコメント(先頭が#)を除く行を変数DATAへ読込み表示する。
for DATA in `sed -e '/^$/d' -e '/^#/d' file.txt`
do
echo "${DATA}"
done
テキストファイルの空白行を削除したテキストファイルを作成する
例1、in_file.txtの空白行を削除してout_file.txtを作成する。
sed '/^$/d' in_file > out_file
テキストファイル中の文字列の一括変更
例1、file1.txtの文字列ABCをDEFに変えてfile2.txtを作成する。
sed 's/ABC/DEF2/g' file1.txt > file2.txt
テキストファイルの指定行を表示する
例1、file1.txtの10行目から20行目までを表示する。
cat file.txt | sed -n '10,20p'
空(ゼロバイト)ファイルの作成
例、空ファイル(file.txt)を作成する。
touch file.txt
例、空ファイル(file.txt)を作成する。
cat /dev/null > file.txt
例、空ファイル(file.txt)を作成する。
cp /dev/null file.txt
テンポラリファイルの作成
例1、テンポラリファイルを作成して変数$TMP_FILEにファイル名を設定する。
TMP_FILE=`mktemp -c 2> /dev/null`
閏年の判定
if [ ${DATE_YYYY}%4 -eq 0 -a \
! ${DATE_YYYY}%100 -eq 0 -o \
${DATE_YYYY}%400 -eq 0 ]
then
# 閏年
else
# 閏年以外
fi
閏年の判定2
cal 2 {西暦} | sed -n '3,8p' | grep 29 > /dev/null
$?が0なら閏年、$?が1なら普通年
例1、2000年が閏年が調べる。
cal 2 2000 | sed -n '3,8p' | grep 29 > /dev/null
$?が0になり閏年。
例2、2003年が閏年が調べる。
cal 2 2003 | sed -n '3,8p' | grep 29 > /dev/null
$?が1になり普通年。
現在の時刻からの時間の加減算
h_calc.ksh
#!/usr/bin/ksh
echo `TZ=JST$(printf "%d" $(echo "-9 ${1}*(-1)"|bc));date "+%Y/%m/%d %H:%M:%S"`
※第一引数に時間を渡す。
例、一時間後の時間を求める。
h_calc.ksh +1
tailで指定の文字列を含む行を表示する。
例、/log/syslogファイルにloginを含む行が追加されたらその行を表示する。
tail -f /log/syslog | grep login
case 使用例
例1、${1}が01〜09か判断して処理する。それ以外のときはエラー。
case "${1}" in
"01"|"02"|"03"|"04"|"05"|"06"|"07"|"08"|"09")
USR_NAME="USER${1}"
GRP_NAME="USER0"
;;
*)
"K00001E ユーザ種別エラー"
exit 16
;;
esac
for 使用例
for 変数 in 代入1〜n
do
式1
done
例1、変数iに文字a〜fを入れて繰り返す。
for i in a b c d e f
do
echo $i
done
例2、テキストファイルをデリミタ(空白・タブ・改行などIFSで設定する)ずつ読み込み変数iに入れEOFまで繰り返す。
for i in `cat env.txt`
do
echo ">$i<"
done
grep 使用例
例1、シンボリックを全て表示する(行の先頭が一致するものを抽出)
ls -laR / | grep ^l
if 使用例
例1、算術式の評価。(数値の比較)
if (( ${ANS} > 0 ))
then
echo 'ANS > 0'
else
echo 'ANS <= 0'
fi
※使える算術式は「==,!=,<,>」
例2、条件式の評価。(文字列の比較)
if [[ ${ANS} = "" ]]
then
echo 'ANS空白'
else
echo 'ANS空白以外'
fi
※使える算術式は「=,!=,<,>」
if [ $? -eq 1 ];then echo "error";fi
if [ $? -eq 1 ]
then
echo "error"
else
echo "OK"
fi
ftp
ftp -v -i -n -B 56 HOST_NAME > LOGFILE 2>&1 <<END
user USER_ID USER_PW
bin
cd PUT_DIR
lcd FTP_DIR
put FILE_NAME
bye
END
until 使用例
例1、10回繰り返す。
I=1
until (( ${I} > 10 ))
do
echo ${I}
I=`expr ${I} + 1`
done
while 使用例
例1、10回繰り返す。
I=1
while (( ${I} <= 10 ))
do
echo ${I}
I=`expr ${I} + 1`
done
例2、引数で渡されたファイル名の内容を表示する。
while read RECORD
do
echo ${RECORD}
done < ${1}
例3、永久ループ。
while true
do
[command list]
done
remshで実行したコマンドの戻り値を参照するには?
ANS=`remsh 192.168.1.1 -n "ls -f /tmp/tamdaq.txt > /dev/null 2>&1 ; echo \$?"`
その他
・シェルが自動的に設定するパラメータ
$0 コマンド名
$# パラメータの数(10進数)
$1〜$9 パラメータの内容
$* すべてのパラメータの内容
$@ $*とほぼ同じ
$$ プロセス番号
$? 最後に実行したコマンドが戻した(10進数)
$- シェルにセットされているオプション
$! バックグラウンドで実行された直前のプロセスのプロセス番号
$IFS 区切り文字のリスト。通常はスペース、タブ、改行が設定されている。「IFS=$' \t\n'」
改行だけを設定するには、「IFS=$'\n'」とする。
設定内容の確認方法(8進数)「echo -n "$IFS" | od -b」
・パラメータ置換
$parameter parameterの値に置換
$#parameter parameterの長さに置換
${parameter:=word} parameterが未設定又はヌルの場合には、parameterがwordに設定し、その後parameterに置き換える。
STR="xyz"
echo ${STR:="abc"}
${parameter:-word} parameterが未設定の場合には、parameterがwordに設定し、その後parameterに置き換える。
STR="xyz"
echo ${STR:-"abc"}
${parameter:+word} parameterがヌル以外に設定されている場合には、parameterがwordに設定し、その後parameterに置き換える。
STR="xyz"
echo ${STR:+"abc"}
${parameter:?word}
${parameter#pattern} patternがparameterの値の先頭部分と一致した場合には、parameterから一致した部分を削除した値が、置換される。
STR="1999/12/31";echo ${STR#*/}
12/31が出力される。
${parameter##pattern} STR="1999/12/31";echo ${STR##*/}
31が出力される。
${parameter%pattern} patternがparameterの値の最後部分と一致した場合には、parameterの値から一致した部分を削除した値に置換される。
STR="1999/12/31";echo ${STR%/*}
1999/12が出力される。
${parameter%%pattern} STR="1999/12/31";echo ${STR%%/*}
1999が出力される。
・「"」と「'」の違い
abc.shというシェルで以下のような場合
echo "$0" abc.shと表示され
echo '$0' $0と表示される
「"」で囲むとパラメータとして内容を展開されるが「'」はそのまま展開される。
「"」で囲んでその中で「'」で囲んだ場合は置換される。
STR='ABC'
echo "${STR}" ⇒ 「ABC」
echo '${STR}' ⇒ 「${STR}」
echo "'${STR}'" ⇒ 「'ABC'」
--------------------------------------------------------------------------------
・コロン「:」
なにもしたくない時に使います。
例、file.txtがあるときは何もせず、無かったら「File Not Found」を出力する。
if test -f file.txt;then
###############################################################################################################################################################################################################################################################
else
echo "File Not Found"
fi
--------------------------------------------------------------------------------
・コマンドの置換「`command` or $(command)」
チルドで囲まれたコマンドをその実行結果と置き換えます。
例、PATH=`pwd`
--------------------------------------------------------------------------------
/dev/null 2>&1 出力先にエラーをリダイレクトする
/dev/null 1>&2 エラーの出力先に出力をリダイレクトする
--------------------------------------------------------------------------------
DATE_SFX=`date +%Y%m%d%H%M%S`
exp1 -eq exp2 exp1 が exp2 と等しければ、真となります。
exp1 -ne exp2 exp1 が exp2 と等しくなければ、真となります。
exp1 -lt exp2 exp1 が exp2 より小さければ、真となります。
exp1 -gt exp2 exp1 が exp2 より大きければ、真となります。
exp1 -le exp2 exp1 が exp2 以下であれば、真となります。
exp1 -ge exp2 exp1 が exp2 以上であれば、真となります。
・エスケープ・シーケンス
\a 警報
\b バック・スペース
\c 改行を追加しないで行をプリント
\f フォーム・フィード
\n 改行
\r キャリッジ・リターン
\t タブ
\v 垂直タブ
\' シングルクォーテーション
\\ バックスラッシュ
\n ASCII コードが1桁、2桁、3桁、または4桁の8進数である 8ビット文字 n, 最初の文字はゼロでなければなりません
・リダイレクション
<word ファイルwordを標準入力として使用します。
>word ファイル word を標準出力として使用します。
>|word noclobber オプションを無効にすることを除き、> と同じです。
>>word ファイル word を標準出力として使用しファイルの末尾に追加します。
<>word 標準入力として読み書きするため、ファイル word をオープンします。
<<[-]word
<&digit 標準入力がファイル記述子 digit から複写されます。
>&digit 標準出力がファイル記述子 digit に複写されます。
<&- 標準入力がクローズされます。
>&- 標準出力がクローズされます。
<&p コプロセスからの入力を標準入力に移します。
>&p コプロセスへの出力を標準出力に移します。
ファイル記述子0 (標準入力)
ファイル記述子1 (標準出力)
ファイル記述子2 (標準エラー)
フィールドで抽出
D1_YY=`echo ${DATE1} | cut -d / -f 1`
D1_MM=`echo ${DATE1} | cut -d / -f 2`
D1_DD=`echo ${DATE1} | cut -d / -f 3`
関数に引数を
function ABC {
echo "$1" <-defが表示される
}
ABC "def" <-関数ABCにdefを渡す
echo "$1" <-メインの$1が表示される
*メニュー
最新の20件
2018-04-17
2012-01-07
2011-12-07
2011-11-03
2011-10-20
2011-10-18
2014-07-13
2013-08-10
2012-01-26
2012-01-25
2012-01-24
2012-01-23
2012-01-21
2012-01-20
2012-01-19
2012-01-17
2012-01-14
2012-01-13
2012-01-09
人気の10件
- counter: 24518
- today: 1
- yesterday: 0
- online: 1