shell中命令行的常用用法
shell执行选项
-n 测试shell script语法结构,只读取shell script但不执行
-x 进入跟踪方式,显示所执行的每一条命令,用于调度
-a Tag all variables for eXPort
-c “string” 从strings中读取命令
-e 非交互方式
-f 关闭shell文件名产生功能
-h locate and remember functions as defind
-i 交互方式
-k 从环境变量中读取命令的参数
-r 限制方式
-s 从标准输入读取命令
-t 执行命令后退出(shell exits)
-u 在替换中如使用未定义变量为错误
-v verbose,显示shell输入行
/************************************************************************************ CMD 代表在shell中以命令行模式执行的shell语法
LANG 代表在shell中的基本shell语法及其用法
TT 代表shell编程中的特殊情况,及其使用方式
/************************************************************************************
#!/bin/ksh shell的 Linux下脚本语言的解释器(用来说明当前的脚本语言类型)
特殊用法 ^代表行首 $代表结尾
CMD——date得用法: DATE=’date +”%m/%d %T”‘
date +”%m/%d %T”
date +”%y%m%d%H%M”
date +%Y%m%d-%H%M%S
LastExecTime=`date -d “$1 $2″ +”%s”`
LastExecTime=`expr $LastExecTime – 60 /* 5`
date -d “2008/12/12″ OR date -d “2008-12-12″ 显示字符串的内容而不是NOW当前的时间
%s Displays the number of seconds since January 1, 1970, Coordinated Universal Time (CUT).//
CMD——touch 的用法 -a access time 设定访问时间
-m modify time 设定修改时间
touch -m -t 09021130 test.txt 以当年为时间,设置修改时间为09/02 11:30
qoo@pdm20111[/work/qoo/tmp/wangj]touch -m -t 0602011130 deltmp.sh
qoo@pdm20111[/work/qoo/tmp/wangj]l
-rwxr-xr-x 1 qoo qoo 53 Feb 01 2006 deltmp.sh*
CMD——管道得用法 ps -ef | grep “PDDB”$TARGET”.exec” | grep -v grep | awk ‘{print $2}’`(对指定的进程进行输出及查询)
CMD——cut的用法 cut -d 指定与空格和tab键不同的域分隔符。
cut -d’:’ -f1 抽出以‘:’为分隔符的第一个域中的内容
cut -b18- 将文件中每行第18以后字符全部剪出
cut -b18 只剪出每行的第18个字符
- c用来指定剪切范围,如下所示:
- c 1,5-7 剪切第1个字符,然后是第5到第7个字符。
-c1-50 剪切前5 0个字符。
CMD——uniq的用法 grep SYSCALL_VECTOR /tmp/*.h | cut -d’:’ -f1| uniq > filename
在这里uniq去除重复的行文本
-c 打印每一重复行的重复次数
uniq -u输出唯一行 -d 输出重复行
CMD——tr ” ” “/n” 将空格换成/n
CMD——特殊赋值 kill -USR1 `cat $DIR_WORK/PDDB”$t”.exec.pid`(通过cat命令获取文件ID并传参给kill)
CMD——find的用法 find . -name “*.java” -type f -print |xargs grep “BBBB” /dev/null
-type f 为指定按照正则表达式的方式进行搜索
find . -type f -exec ls -l {} /;
exec选项后面跟随着所要执行的命令,然后是一对儿{ },一个空格和一个/,最后是一个分号;
find /logs -type f -mtime +5 -exec rm {} /;为了在/logs目录中查找更改时间在5日以前的文件并删除它们;
find . -name system -prune -o -name “*.txt” -type f -print | grep -v “FAILURE_NOTICE.txt” 忽略system目录,查找当前目录下txt文件,排除其中的”FAILURE_NOTICE.txt”
CMD——rsh的用法 rsh host -l username 在远程主机上登陆shell并执行命令
# rsh $clm -l $cluser /usr/local/bin/mvs-ftp -i $tmp1 -o $tmp2
# rsh $clm -l $cluser chmod 666 $tmp2
CMD——ssh的用法 在执行 sshd 之前可以指定它的 port,例如:sshd –p 999
若有安装 SSL,可以指定 SSL 的 port 443,例如:sshd –p 443
这样就可以经过 SSL 及 SSH 双重的保护,但必须去指明使用的 port
ssh –l user –p 443 mouse.oit.edu.tw 才行,若不指明则仍然使用预设的port 22
CMD——expr的用法 用来计算的 $var=expr $var + 1
LANG——路径变量的赋值 STD=”/prod/qoo” (注意双引号的作用,亦可不用)
LANG——引用变量 $STD(使用$符加变量名的方式)
LANG——文件包含: . /prod/qoo/run/etc/SONYBIN.def (注意点后有个空格,后面既是所要包含的文件全路径)
LANG——参数的用法 [ ! -d $DIR_WORK ] 以此为例进行说明类似的还有
-d 确认文件夹是否存在
-f 具有强制的作用,亦可用来判定文件的存在(不太确定?)普通文件
-t 指定为交互模式
-L 符号连接
-z 测试变量是否为空 -z $VAR 当变量为空是 条件为真
-w 文件可写
-r 文件可读
-s 文件长度大于0、非空
-x 可执行
-eq 等于
-e 测试文件是否存在
-z 空串。
-n 非空串。
LANG——FOR得用法 for TARGET in 0700 (将0700赋予TARGET进行循环,以此类推)
do
done
LANG——if 得用法 if[ ]; then
do something
fi
LANG——wc的用法 wc 几行匹配,有多少个字,这些字占用多少字节的空间
-c 有多少个字
-l 只显示包含匹配字符的行号
-w
LANG——expr index=`expr $index + 1 ` 逻辑运算符 即index=index+1
LANG——cat的特殊用法 cat -v filename //查看文件中的特殊字符
cat -b /etc/named.conf // -b 只能对非空白行进行编号 -n 可以对所有行进行编号
TT——$$ 获取当前进程号 PID=$$;export PID ($$为当前的进程ID,通过export关键字将进程ID导入环境变量)
TT——读文件操作 `cat $ResultFile | awk ‘{print $1}’ | sort -u` 从目标$ResultFile文件中读取数据,输出第一个域,并去掉多余行
TT——读文件的另一种方法 while read LINE
do
echo “$LINE”
:
done <$FILENAME
TT——#@ 传参 if [[ ${#@} /dev/null 2>&1 &
TT——命令的赋值 使用数字键 1 左边的键码将命令括起来 如:`ls` ,通过此法可获取命令行的输出数据
TT——字符串拼串 STSFILE=STA*.txt ,如左边所示:将任意形式的变量或字符组合在一起
TT—— more PDE50K | more 另一种JOB执行方式,它可以将执行的信息全部的输出来,并分屏显示
TT—— let 的用法 let "cun=cun-400" // 执行该条语句
TT—— -mtime n File's data was last modified n*24 hours ago 最后修改时间为N天前的文件数据
TT—— java -cp -classpath ${JAVA_HOME}/java -Xmx128m -cp ${CLASSPATH} ${JOB} $1 >> $LogFile
将JAVA的classpath加入环境搜索路径
#java -cp -classpath //set search path for application class and resources
java -X #-X print help on non-standard options
----------------------------------------------------------------------------------------------------------------
#
# AWK COMMAND SHELL中正则表达式之AWK命令
#
----------------------------------------------------------------------------------------------------------------
awk '{print $3,$2}' 抽出第二和第三列中的内容,常配合如下用法 grep ls cat等等
ps -ef | awk '{print $3,$2}'
awk -v tms=$file -v表示为变量分配一个值
ll | grep haha*.txt | awk '{print $3,$2}'
awk '{split(s,a,fs)}' 在fs上将s分成序列a
如awk 'BEGIN {print split("123#456#678",myarray,"#")}'
以#为分隔符将字符串划分成myarray数组
awk -F, '{print $1 "," $3 }' 以,号为分隔符提取字段 或awk -F',' '{print $1 "," $3 }'
CMD——AWK内置的字符串函数的用法
/******************************************************************
gsub(r,s) 在整个$ 0中用s替代r
gsub(r,s,t) 在整个t中用s替代r
index(s,t) 返回s中字符串t的第一位置
length(s) 返回s长度
match(s,r) 测试s是否包含匹配r的字符串
split(s,a,fs) 在fs上将s分成序列a
sprint(fmt,exp) 返回经fmt格式化后的exp
sub(r,s) 用$0中最左边最长的子串代替s
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分
******************************************************************/
----------------------------------------------------------------------------------------------------------------
关于文件描述符的説明
----------------------------------------------------------------------------------------------------------------
默认情况下始终有3个"文件"处于打开状态, stdin (键盘), stdout (屏幕), and stderr (错误消息输出到屏幕上).
exec 3< $g_tmp1 打开文件$g_tmp1并为其分配描述符 3
exec <filename 命令会将stdin重定向到文件中. 从这句开始, 后边的输入就都来自于这个文件了, 而不是标准输入了(通常都是键盘输入).
exec 3' date.file
shell中SED命令的用法一 -n 整个文件都打印出来,并且匹配行打印了行号。如果只关心实际行号,使用- e选项。
shell中SED命令的用法二 sed -e 's:%host%:'$hostname':' -e 's:%userid%:'$userid':' -e 's:%passwd%:'$passwd':'
-e 's:%ipaddress%:'$ipaddress':' -e 's:%cluser%:'$cluser':' -e 's:%clpasswd%:'$clpasswd':'
-e 's:%clfile%:'$clfile':' -e 's:%hostfile%:'$hostfile':' -e 's:%hostjcl%:'$hostjcl':'
-e 's:%timeout%:'$timeout':' $template > $tmp1
date >> $G_DATAFILE
以上中 将%host% 替换成$hostname 并送到标准输出 (完成字符串的替换)
----------------------------------------------------------------------------------------------------------------
TEST COMMAND命令的用法 在bash和pdksh环境中,test命令用来测试条件表达式
----------------------------------------------------------------------------------------------------------------
其用法如下:
test expression
test命令可以和多种系统运算符一起使用。这些运算符可以分为四类:整数运算符、字符串运算符、文件运算符和逻辑运算符
1) 整数运算符
int1 -eq int2 如果int1 和int2相等,则返回真。
int1 -ge int2 如果int1 大于等于int2,则返回真。
int1 -gt int2 如果int1 大于int2,返回真。
int1 -le int2 如果int 1小于等于int 2,则返回真。
int1 -lt int2 如果int 1小于int2,则返回真。
int1 -ne int2 如果int1 不等于int2,则返回真。
2) 字符串运算符
str1 = str2 如果str1 和str2相同,则返回真。
str1 != str2 如果str1 和str2不相同,则返回真。
-n str 如果str 的长度大于零,则返回真。
-z str 如果str 的长度等于零,则返回真。
3) 文件运算符
-d filename 如果filename 为目录,则返回真。
-f filename 如果filename 为普通的文件,则返回真。
-r filename 如果filename 可读,则返回真。
-s filename 如果filename 的长度大于零,则返回真。
-w filename 如果filename 可写,则返回真。
-x filename 如果filename 可执行,则返回真。
4) 逻辑运算符
! expr 如果expr 为假,则返回真。
expr1 -a expr2 如果expr1 和expr2同时为真,则返回真。
expr1 -o expr2 如果expr1 或expr2有一个为真,则返回真。
tcsh中没有test命令,但它同样支持表达式。tcsh支持的表达式形式基本上和C语言一样。
这些表达式大多数用在if和while命令中。
----------------------------------------------------------------------------------------------------------------
COMM COMMAND 説明
----------------------------------------------------------------------------------------------------------------
如果想对两个有序的文件进行比较,可以使用comm命令。
语法:comm [- 123 ] file1 file2
说明:该命令是对两个已经排好序的文件进行比较。其中file1和file2是已排序的文件。comm读取这两个文件,然后生成三列输出:仅在file1中出现的行;仅在file2中出现的行;在两个文件中都存在的行。如果文件名用”- “,则表
示从标准输入读取。
选项1、2或3抑制相应的列显示。例如
comm – 12就只显示在两个文件中都存在的行;
comm – 23只显示在第一个文件中出现而未在第二个文件中出现的行;
comm – 123则什么也不显示。
—————————————————————————————————————-
MVS-FTP COMMAND 説明
—————————————————————————————————————-
ftp -i -n 这意味着不要自动登录,而是关闭交互模式。这使得脚本可以使用user命令进行登录
-v 表示禁止远程服务器回应
ftp -i -n -v 43.17.42.25 <<EOF
user padics padics
ftp -i -n $DEST_HEST<<FTPIT
user anonymous $USER@$THISHOST
—————————————————————————————————————-
用SHELL匹配正则表达式 举例説明
—————————————————————————————————————-
[0-2][0-4]/{2/}/.[0-2][0-4]/{2/}/.[0-2][0-4]/{2/} // this is a ipadress regular by bash shell
RECORD=`echo $LINE | awk ‘ { if($6~/GET/ && $7~/’”$DMZ_SERVER”‘/ && $7~//_/) printf(”%s”,$4) }’ ` //其中~代表匹配正则表达式,~其后要紧跟正则表达式