kshってaixで使ったかも
ファイル読み込み
#!/bin/ksh
#入力ファイル名
INPUTFILE="./input.txt"
#入力ファイルの区切り文字
IFS=",";
#ファイル読み込み
while read line ; do
if [[ "$line" != "" ]]
then
set $line
echo "[$1][$2]"
fi
done < ${INPUTFILE}
case文
OSNAME=$(uname)
case $OSNAME in
Linux)
dmesg > $SYSLOG_OUTFILE
;; # not supported iostat COMMAND
SunOS)
dmesg > $SYSLOG_OUTFILE
IOOPT=-x
;;
HP-UX)
alias pscmd="ps -ef"
alias dfcmd="bdf"
IOOPT=-t
;;
AIX)
alias pscmd="ps -e -o user,pid,ppid"
IOOPT=-d
;;
*)
echo "Not support $OSNAME.";exit 3
;;
esac
for文
RESULT=/tmp/res.out
for ARG in "$@"
do
echo $ARG
done > RESULT 2>&1
while文
let n=0
while read line
do
let n=$n+1
echo "$n: $line"
done < $0
echo "Total lines are $n ."
while無限
while true; do
sleep 60
done
OSコマンド実行
set -A DIR_NMS $(ls) : DIR_NMS 配列に `ls` の結果
MAX_DIR=${#DIR_NMS[*]} : MAX_DIR に ls の個数
ただしファイル数が多い場合、配列がオーバーフローしエラー
配列の最大サイズは 1024 です。
alias datecmd='date +"%Y %m %d"'
TODAY=$(datecmd)
演算子
演算子 意味 例:let no=6 結果 exp1 -eq exp2 exp1 と exp2 が等しいなら真 if [[ $no -eq 6 ]];then echo YES;fi; YES exp1 -ne exp2 exp1 と exp2 が等しくないなら真 if [[ $no -ne 6 ]];then echo NO;fi; exp1 -lt exp2 exp1 < exp2 なら真 if [[ $no -lt 6 ]];then echo NO;fi; exp1 -gt exp2 exp1 > exp2 なら真 if [[ $no -gt 6 ]];then echo NO;fi; exp1 -le exp2 exp1 <= exp2 なら真 if [[ $no -le 6 ]];then echo YES;fi; YES exp1 -ge exp2 exp1 >= exp2 なら真 if [[ $no -ge 6 ]];then echo YES;fi; YES
文字列検査演算子
演算子 意 味 例:str=”oracle”;str1=”AZ”;str2=”BZ” 結果 -n string string の長さがゼロでなければ真 if [[ -n $str ]];then echo YES;fi; YES -o option option が設定されていれば真 if [[ -o $str ]];then echo NO;fi; -z string string の長さがゼロならば真 if [[ -z $str ]];then echo NO;fi; YES string = pattern string と pattern が一致すれば真 if [[ $str = “oracle” ]];then echo YES;fi; YES string != pattern string と pattern が一致しなければ真 if [[ $str != “oracle” ]];then echo NO;fi; string1 < string2 string1 < string2 なら真 if [[ $str < “ORACLE” ]];then echo NO;fi; string1 > string2 string1 > string2 なら真 if [[ $str > “ORACLE” ]];then echo YES;fi; YES (expression) expression が真なら真 if [[ ($str = [a-z]*) ]];then echo YES;fi; YES ! expression expression が偽なら真 if [[ ! ($str = [A-Z]*) ]];then echo YES;fi; YES exp1 && exp2 exp1 と exp2 が真なら真 if [[ (\$str1 = [A-Z]*) \&\& (\$str2 = [A-Z]*) ]];then echo YES;fi; YES exp1 || exp2 exp1 か exp2 が真なら真 if [[ (\$str1 = “AZ”) || (\$str2 = “AZ”) ]];then echo YES;fi; YES
ファイル検査演算子
演算子 真となる条件 例 結果 -a file ファイルは存在する if [[ -a $HOME/.cshrc ]];then echo YES;fi YES -b file ファイルは存在し、ブロック型である if [[ -b /dev/null ]];then echo YES;fi -c file ファイルは存在し、文字型である if [[ -c /dev/stdin ]];then echo YES;fi YES -d file ファイルはディレクトリ if [[ -d $HOME ]];then echo YES;fi YES -f file ファイルは普通のファイル if [[ -f $HOME/.cshrc ]];then echo YES;fi YES -g file ファイルは存在し、setgid が設定されている if [[ -g $HOME/.cshrc ]];then echo YES;fi -k file ファイルは存在し、sticky が設定されている if [[ -k /opt/SWAP ]];then echo YES;fi -p file ファイルは存在し、fifo である if [[ -p /tmp/.X11-pipe/X0 ]];then echo YES;fi -r file ファイルをユーザが読める if [[ -r $HOME/.cshrc ]];then echo YES;fi YES -s file ファイルは存在し、0 より大きい if [[ -s $HOME/.cshrc ]];then echo YES;fi YES -t N ファイルディスクリプタ N が端末である if [[ -t 1 ]];then echo YES;fi YES -u file ファイルは存在し、setuid が設定されている if [[ -u $HOME/.cshrc ]];then echo YES;fi YES -w file ファイルは存在し、ユーザが書ける if [[ -w $HOME/.cshrc ]];then echo YES;fi YES -x file ファイルは存在し、ユーザが実行できる if [[ -x /bin/ksh ]];then echo YES;fi YES -G file ファイルは存在し、グループ id はシェル と同じ if [[ -G $HOME/.cshrc ]];then echo YES;fi YES -L file ファイルは存在し、シンボリックリンクである if [[ -L /usr/lib/libcrypt.so ]];then echo YES;fi YES -O file ユーザはファイルの所有者 if [[ -O $HOME/.cshrc ]];then echo YES;fi YES -S file ファイルは存在し、ソケットである if [[ -S /var/tmp/.oracle/sora817 ]];then echo YES;fi YES F1 -nt F2 ファイルは存在し、F2 より新しい if [[ .cshrc -nt $HOME/.cshrc ]];then echo YES;fi YES F1 -ot F2 ファイルは存在し、F2 より古い if [[test.c -ot test.o ]];then echo YES;fi YES F1 -ef F2 ファイルは存在し、ファイルが同じファイルを参照 if [[ /usr/lib/libcrypt.so -ef /lib/libcrypt.so.1 ]];then echo YES;fi YES
メタ文字
メタ文字 意 味 例 ~ ホームディレクトリ cd ~taka $ 変数識別子 $HOME $! 直前に呼び出した子プロセスの番号 kill $! $- シェルに与えられたフラグ <,>,&,! 入出力の切換え echo $HOME > /tmp/out !,^ 履歴 !vi $$ 起動中のシェルのプロセス番号 set out=/tmp/$$.out ; コマンド区切り cd;pwd () コマンドグループ (cd; make) コマンド
コマンド置き換え set file = ls
& バックグラウンドジョブ tst & \,’,” 文字をエスケープする echo ‘$HOME’ \ 次文字をエスケープする echo \$HOME 継続行であることを示す。前に空白が必要 XXXXXXX \ *,?,[,],,{,},|,~,- ファイル名展開 ls t?.* 文字として扱いたい場合はエスケープ () # コメント | パイプ ls | more
コメント