Learn Shell
cat << EOF
This will create the here document. Need to research.
EOF
算术运算
expr 执行简单的整数算术运算
awk、bc 执行浮点算术运算
方括号代表test命令,test测试命令的结果之后,返回状态为0表示成功,返回状态为非0表示失败。注意, test命令不允许展开通配符。
while对紧跟在后面的命令进行求值,若该命令的退出状态为0,则执行循环体内的命令,循环一直到while后面的那条命令的退出状态为非0为止。
case的值里可以用shell通配字符,还可以用坚杠对两个值取或
元字符
* 匹配零个或多个字符
? 匹配单一字符
[abc] 匹配a、b、c中这组字符中的一个
[a-z] 匹配在a至z这个范围内的某个字符
[!abc] 匹配不在a、b、c中这组字符中的一个
反斜杆\可用于转义单个字符,使其免受解释。如果在双括号里,它将保护美元符号$,反引号``和反斜杠不被解释。
echo "Where are you going ?"
echo "\$5.00"
单引号''可以用于保护其中的所有元字符不被解释。
echo 'Don\'t you need $5.00?'
反单引号``可以用来执行命令替换。
echo "Usage: `basename $0`, arg1, arg2"
$$ 显示当前shell的PID。
$0 当前shell脚本的名称
$* 显示所有位置参数,与$@相同
"$*" 扩展为单个变量
"$@" 扩展为多个单独的变量
$# 显示位置参数的个数
$? shell执行上一条命令的退出状态值,为0则成功。
$! 最近一个进入后台的作业的PID
sleep 25&
echo $!
IO重定向
2>文件名 重定向标准错误输出到文件
&>文件名 重定向标准输出和标准错误到文件
>&文件名 重定向标准输出和标准错误到文件(首选方式)
2>&1 将标准错误输出重定向到输出的去处
1>&2 将输出重定向到标准错误输出的去处
常见shell内置环境变量
LOGNAME
常见shell命令
date +%T 显示当前时间
read 可用于从终端或文件中读取输入
set 将重置位置参数
exit 终止脚本并退回命令行,后面可接0~255的整数参数
ps -ef 显示正在系统上运行的所有进程
常用shell脚本片段
特殊变量修饰符:?将检查$n是否有值,如果$n无值,则打印指定信息并退出
name=${n:?"require an argument."}
echo Hello $name
grep
-----------------------------------------------------------------------------------------------------------------------------
grep option RE filename
发现了要查找的模式,退出状态为0
找不到要查找的模式,退出状态为1
找不到指定的文件时,退出状态为2
选项
-i
忽略大小写
-r
递归查找文件,包括文件的内容
-n
加上行号
-v
反向查找,列出不匹配的行
-c
显示匹配到的行的数目,不显示行的内容
-A -B -C
显示行数控制
元字符
^
行首定位符
grep '^love' filename 匹配所有love开头的行
$
行尾定位符
grep 'love$' filename 匹配所有以love结尾的行
.
匹配一个字符
grep 'l..e' filename 匹配包含一个l,后跟两个字符,再跟一个e的行
*
匹配零或多个前导字符
grep 'love1*' filename 匹配包含0或多个1的模式love的行
[]
匹配一组字符中的任一个
grep '[Ll]ove' filename 匹配包含love或Love模式的行
[^]
匹配不在指定字符内的字符
grep '[^a-z]ove' filename
\<
词首定位符
\>
词尾定位符
grep '\<[a-z].*n\>' filename
x\{m\}
字符x的重复出现次数为m次
x\{m,\}
字符x的重复出现次数至少为m次
x\{m,n\}
字符x的重复出现次数为至少m次,但不超过n次
grep v\{1,2\} filename
\(..\)
标志匹配到的字符,最多可以设置9个标签,从\1开始
grep '\(v\)[a-z]\1' filename 可以匹配出lovev,\1被标志为v
sed
-----------------------------------------------------------------------------------------------------------------------------
sed option 'command' filename
不管模式找到与否,退出状态均为0
只有当出现语法错误时,退出状态才为非0
option
-n
取消默认输出
sed -n '/an/p' file
-f
指定脚本文件名
command
d
删除行
sed '/love/d' file 删除含有love的行
sed '1,3/d' file 删除文件中的第1~3行
sed '$d' file 删除最后一行
sed '3,$d' file 删除第3到最后一行的
p
打印行
sed -n '/an/p' file
s
用一个字符串代替另一个, 注意,紧跟s命令的字符将成为新的串分隔符
sed -n 's/love/you/p' file 只替换行内第一个love,第二个love不替换
sed -n 's/love/you/gp' file 行内全局替换
sed -n 's#love#you#gp' file 行内全局替换
!
对所选行以外的所有行应用命令
sed '/love/!d' file 或 sed '/love/\!d' 删除所有不含love的行
元字符
^
行首定位符
$
行尾定位符
.
匹配一个字符
*
匹配零或多个前导字符
[]
匹配一组字符中的任一个
[^]
匹配不在指定字符内的字符
\<
词首定位符
\>
词尾定位符
x\{m\}
字符x的重复出现次数为m次
x\{m,\}
字符x的重复出现次数至少为m次
x\{m,n\}
字符x的重复出现次数为至少m次,但不超过n次
\(..\)
标志匹配到的字符,最多可以设置9个标签,从\1开始
&
保存查找串以便在替换串中引用
sed 's/love/**&**/' file 将love变成**love**
sed可以用将分隔符/改成另一个字符,只需要在字符前加一个\即可,如下所示的两个命令效果是一样的,在第二条中用c来取代/
sed '/love/d' file
sed '\clovecd' file
exec
-----------------------------------------------------------------------------------------------------------------------------
exec命令能在不启动新进程的前提下,将当前正在运行的程序替换为另一个新的程序。
jili@jili-desktop:~$ exec > temp //将文件temp作为当前shell的标准输出
jili@jili-desktop:~$ pwd
jili@jili-desktop:~$ date
jili@jili-desktop:~$ exec > /dev/tty //重新指向终端
jili@jili-desktop:~$ date
Tue Jan 19 15:00:53 CST 2010
jili@jili-desktop:~$ cat temp
/home/jili
Tue Jan 19 15:00:37 CST 2010
jili@jili-desktop:~$
cat /etc/redhat-release
阅读(763) | 评论(0) | 转发(0) |