您的位置:首页 > 运维架构 > Shell

SHELL--基本命令

2015-07-26 21:50 274 查看
1:find和xargs

find pathname -options [ -print -exec -ok]

-exec find命令对匹配的文件执行该参数所给出的 s h e l l命令。相应命令的形式为 ' command' {} \;,注意 { } 和\;之间的空格。

-ok 和- exec的作用相同,只不过OK以一种更为安全的模式来执行该参数所给出的 s h e l l命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

find . -name "[a-z][a-z][0-9][0-9].txt" 查询2个小写字母2数字的txt文件

find . -perm 755 按文件权限查询

find . -user oracle 按用户user查 -group按组查

find /home/oracle -mtime -5 查询更改时间5天以内(-)的文件,以外用(+)

find . -newer a ! -newer b -exec ls -l {} \; 找到比a新,比b旧的文件

find ~ -type f -exec ls -l {} \; 查普通文件 d目录 b块设备文件。c - 字符设备文件。p - 管道文件。l - 符号链接文件。

find . -size +1000c 查大于1K的文件 c单位Byte

find . -type f | xargs grep -i "ora-"

touch 指定时间文件

-a 或--time=atime或--time=access或--time=use  只更改存取时间。

-c 或--no-create  不建立任何文档

-d  使用指定的日期时间,而非现在的时间。

-f  此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。

-m 或--time=mtime或--time=modify  只更改变动时间。

-r  把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。

-t  使用指定的日期时间,而非现在的时间。

touch -t 201507230000.00 create_user.txt

2:crontab

分< >时< >日 < >月 < >星期< >要运行的命令

3:标准输入、输出及错误

command >> filename 2>&1 把标准输出和标准错误一起重定向到一个文件中 (追加 )

命令1 && 命令2 命令1成功则执行命令2

命令1 || 命令2 命令1不成功则执行命令2

4:正则表达式-文本过滤

句点“ .”可以匹配任意单字符

ls -l | grep ^d 匹配ls -l 结果的以d为开头的(即目录) ---^只允许在一行的开始匹配字符或单词

ls -l | grep sh$ 匹配ls -l 结果的以sh为结尾的 ----可以说 $与^正相反,它在行尾匹配字符串或字符, $符号放在匹配单词后。

\ . 假定要匹配包含字符“ .”的各行而“.”代表匹配任意单字符的特殊字符,因此需要屏蔽其含义。($ . ' " * [ ] ^ | () \ + ?)

使用 *可匹配所有匹配结果任意次,但如果只要指定次数,就应使用 \ { \ } ,此模式有三种形式,即:

pattern\{n\} 匹配模式出现 n次。

pattern\{n,\} 匹配模式出现最少 n次。

pattern\{n,m} 匹配模式出现 n到m次之间, n , m为0 - 2 5 5中任意整数。

5:grep

常用的 g r e p选项有:

-c 只输出匹配行的计数。

-i 不区分大小写(只适用于单字符)。

-h 查询多文件时不显示文件名。

-l 查询多文件时只输出包含匹配字符的文件名。

-n 显示匹配行及行号。

-s 不显示不存在或无匹配文本的错误信息。

-v 显示不包含匹配文本的所有行。

6:awk

awk -F: 'commands' input-file

-F 域分隔符 默认是空格

awk 'BEGIN {print "user dir\n---------------"} {print $3,$9}' 1.sh

? 确保整个 a w k命令用单引号括起来。

? 确保命令内所有引号成对出现。

? 确保用花括号括起动作语句,用圆括号括起条件语句。

? 可能忘记使用花括号,也许你认为没有必要,但 a w k不这样认为,将按之解释语法。

awk '{if($5>="40%") print $1}' 1.sh < <= == !=

awk '$0~/(a|b)/' 1.sh 匹配1.sh中$0 出现a或者出现b的行 / /匹配的边界符 a|b 需要()

{if($4~/brown/) print } 意即如果 $4包含b r o w n,打印它 ~匹配 !~不匹配

&& AND : 语句两边必须同时匹配为真。

|| O R:语句两边同时或其中一边匹配为真。

! 非 求逆

awk '{if ($0="aaa" && $4>="40%") print $0}' 1.sh 去1.sh中匹配$0==aaa并且$4>=40%的行

awk '{if($1=="tmpfs") ($1="tmp");print $1}' 1.sh -----会打印出所有$1

awk '{if($1=="tmpfs") {($1="tmp");print $1}}' 1.sh ------只打印修改的$1(注意{})

awk '(tot+=$2);END{print "tol is "tot}' 1.sh -----统计$2的总和 += 会显示所有记录

awk '{(tot+=$2)};END{print "tol is "tot}' 1.sh -------统计$2的总和 只显示tol is “tot”

ls -l | awk '/^[^d]/ {print $9"\t"$5} {tot+=$5} END {print "tot KB is "tot}' ---统计当前目录下,文件的总计大小KB

ls -l | awk '{printf "%-15s %-20d\n", $9,$5}' ----printf的格式化:%-15s %s是字符串 -15左对齐下一列在15个字符后 %-20d %d是整数,-20同 \n 换行

7:sed

sed -n '1,4p' 1.sh ----- 打印1.sh的1-4行 p是显示 d是删除

sed -n '/oracle/'p 1.sh ------打印匹配oracle的行

sed -e '/oracle/=' 1.sh ----打印匹配oracle的行号(显示所有行) -n则只显示行号,即显示行号,也显示记录 sed -n -e '/oracle/p' -e '/oracle/=' 1.sh

sed 's/root/RT!/g' 1.sh --替换root为RT! g表示全部

sed -n 's/ora/dba &/gp' 1.sh ---匹配ora 并在匹配字符前加dba &代表匹配到的字符

8:合并和分割

s o r t命令的一般格式为:

sort -cmu -o output_file [other options] +pos1 +pos2 input_files

下面简要介绍一下 s o r t的参数:

-c 测试文件是否已经分类。

-m 合并两个分类文件。

-u 删除所有复制行。

-o 存储s o r t结果的输出文件名。

其他选项有:

-b 使用域进行分类时,忽略第一个空格。

-n 指定分类是域上的数字分类。

-t 域分隔符;用非空格或 t a b键分隔域。

-r 对分类次序或比较求逆。

+n n为域号。使用此域号开始分类。

n n为域号。在分类比较时忽略此域,一般与 + n一起使用。

post1 传递到 m, n。 m为域号, n为开始分类字符数;例如 4, 6意即以第 5域分类,从第 7个字符开始。

-k 对第几域进行排序 sort -k2 1.sh 对第二域排序

uniq join cut paste split

9:SHELL

#!/bin/bash

t=luanxie --变量t赋值

echo "today is [mon]:" --提示

read time --读键盘输入

echo "today is ${time:=$t}" --输出 执行在回车输入xx,就把xx传给time,不输入就传t给time

9:条件测试

使用方括号时,要注意在条件两边加上空格。

[oracle@fyl ~]$ [ -d logs ] 判断logs是否为目录-d 目录 -f文件 -L符号链接 -r-w -x 可读写执行 -s文件长度大于0,非空 -u文件有suid位置

[oracle@fyl ~]$ echo $? $? 判断上面执行退出状态 0表示成功 1表示失败

0

[oracle@fyl ~]$ [ -d logsa ]

[oracle@fyl ~]$ echo $?

1

10:循环语句

If 条件1 (如果条件 1 为真)

Then 那么

命令1 (执行命令 1)

elif 条件2 (如果条件 1 不成立)

then 那么

命令2 (执行命令 2)

else (如果条件 1 , 2均不成立)

命令3 (那么执行命令 3)

fi 完成

i f语句必须以单词 f i终止。在 i f语句中漏写 f i是最一般的错误。

e l i f和e l s e为可选项,如果语句中没有否则部分,那么就不需要 e l i f和e l s e部分。 I f语句可以有许多 e l i f部分。最常用的 i f语句是 if then fi结构。

case 值 i n

模式1 )

命令1

. . .

; ;

模式2)

命令2

. . .

;;

e s a c

c a s e工作方式如上所示。取值后面必须为单词 i n,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至;;。取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 *捕获该值,再接受其他输入。

for 变量名 i n列表

d o

命令1

命令2…

d o n e

当变量值在列表里, f o r循环即执行一次所有命令,使用变量名访问列表中取值。命令可为任何有效的 s h e l l命令和语句。变量名为任何单词。 I n列表用法是可选的,如果不用它, f o r循环使用命令行的位置参数。

until 条件

命令1

. . .

d o n e

条件可为任意测试条件,测试发生在循环末尾,因此循环至少执行一次— 请注意这一点。

while 命令

d o

命令1

命令2

. . .

d o n e

虽然通常只使用一个命令,但在 w h i l e和 d o之间可以放几个命令。命令通常用作测试条件。

只有当命令的退出状态为 0时, d o和 d o n e之间命令才被执行,如果退出状态不是 0,则循环终止。

命令执行完毕,控制返回循环顶部,从头开始直至测试条件为假。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: