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,则循环终止。
命令执行完毕,控制返回循环顶部,从头开始直至测试条件为假。
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,则循环终止。
命令执行完毕,控制返回循环顶部,从头开始直至测试条件为假。
相关文章推荐
- 【Powershell】【静态数组】 数组的使用(一)
- shell版俄罗斯方块
- linux shell脚本守护进程监控svn服务
- shell 脚本统计文件梳理及获取磁盘占有率
- shell 脚本编程要点
- 【Powershell】【文件管理】获取文件夹大小和排序 层级关系\大小\名称
- Shell下获取系统时间及转换为时间戳的方法
- 关于Shell 脚本的export语句
- shell变量赋值和引用
- shell基本介绍
- Linux Shell介绍
- 利用git bash的工作流程
- Start cluster zookeeper in shell script
- linux C中调用shell命令和运行shell脚本
- Linux Shell篇之一:Shell编程简介
- 八大排序算法-shell 排序
- Xshell 4 SSH隧道跳转访问局域网服务器
- 未能加载文件或程序集“Microsoft.VisualStudio.Shell, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f1
- shell 学习基地
- Linux常用的系统监控shell脚本