kshってaixで使ったかも

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 exp2exp1 と exp2 が等しいなら真if [[ $no -eq 6 ]];then echo YES;fi;YES
exp1 -ne exp2exp1 と exp2 が等しくないなら真if [[ $no -ne 6 ]];then echo NO;fi;
exp1 -lt exp2exp1 < exp2 なら真if [[ $no -lt 6 ]];then echo NO;fi;
exp1 -gt exp2exp1 > exp2 なら真if [[ $no -gt 6 ]];then echo NO;fi;
exp1 -le exp2exp1 <= exp2 なら真if [[ $no -le 6 ]];then echo YES;fi;YES
exp1 -ge exp2exp1 >= exp2 なら真if [[ $no -ge 6 ]];then echo YES;fi;YES

文字列検査演算子

演算子意      味例:str=”oracle”;str1=”AZ”;str2=”BZ”結果
-n stringstring の長さがゼロでなければ真if [[ -n $str ]];then echo YES;fi;YES
-o optionoption が設定されていれば真if [[ -o $str ]];then echo NO;fi;
-z stringstring の長さがゼロならば真if [[ -z $str ]];then echo NO;fi;YES
string = patternstring と pattern が一致すれば真if [[ $str = “oracle” ]];then echo YES;fi;YES
string != patternstring と pattern が一致しなければ真if [[ $str != “oracle” ]];then echo NO;fi;
string1 < string2string1 < string2 なら真if [[ $str < “ORACLE” ]];then echo NO;fi;
string1 > string2string1 > string2 なら真if [[ $str > “ORACLE” ]];then echo YES;fi;YES
(expression)expression が真なら真if [[ ($str = [a-z]*) ]];then echo YES;fi;YES
! expressionexpression が偽なら真if [[ ! ($str = [A-Z]*) ]];then echo YES;fi;YES
exp1 && exp2exp1 と exp2 が真なら真if [[ (\$str1 = [A-Z]*) \&\& (\$str2 = [A-Z]*) ]];then echo YES;fi;YES
exp1 || exp2exp1 か exp2 が真なら真if [[ (\$str1 = “AZ”) || (\$str2 = “AZ”) ]];then echo YES;fi;YES

ファイル検査演算子

演算子真となる条件結果
-a fileファイルは存在するif [[ -a $HOME/.cshrc ]];then echo YES;fiYES
-b fileファイルは存在し、ブロック型であるif [[ -b /dev/null ]];then echo YES;fi
-c fileファイルは存在し、文字型であるif [[ -c /dev/stdin ]];then echo YES;fiYES
-d fileファイルはディレクトリif [[ -d $HOME ]];then echo YES;fiYES
-f fileファイルは普通のファイルif [[ -f $HOME/.cshrc ]];then echo YES;fiYES
-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;fiYES
-s fileファイルは存在し、0 より大きいif [[ -s $HOME/.cshrc ]];then echo YES;fiYES
-t Nファイルディスクリプタ N が端末であるif [[ -t 1 ]];then echo YES;fiYES
-u fileファイルは存在し、setuid が設定されているif [[ -u $HOME/.cshrc ]];then echo YES;fiYES
-w fileファイルは存在し、ユーザが書けるif [[ -w $HOME/.cshrc ]];then echo YES;fiYES
-x fileファイルは存在し、ユーザが実行できるif [[ -x /bin/ksh ]];then echo YES;fiYES
-G fileファイルは存在し、グループ id はシェル と同じif [[ -G $HOME/.cshrc ]];then echo YES;fiYES
-L fileファイルは存在し、シンボリックリンクであるif [[ -L /usr/lib/libcrypt.so ]];then echo YES;fiYES
-O fileユーザはファイルの所有者if [[ -O $HOME/.cshrc ]];then echo YES;fiYES
-S fileファイルは存在し、ソケットであるif [[ -S /var/tmp/.oracle/sora817 ]];then echo YES;fiYES
F1 -nt F2ファイルは存在し、F2 より新しいif [[ .cshrc -nt $HOME/.cshrc ]];then echo YES;fiYES
F1 -ot F2ファイルは存在し、F2 より古いif [[test.c -ot test.o ]];then echo YES;fiYES
F1 -ef F2ファイルは存在し、ファイルが同じファイルを参照if [[ /usr/lib/libcrypt.so -ef /lib/libcrypt.so.1 ]];then echo YES;fiYES

メタ文字

メタ文字意      味
~ホームディレクトリ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

コメント