Shell Notes
查找:
- find:
- 实时查找,精确,速度慢,支持正则
- find 查找路径 查找标准 查到后处理动作
- 查找路径默认当前目录,查找标准默认路径下所有文件,动作默认打印到屏幕
- 匹配标准:
- -name ‘filename‘ :精确匹配:通配:* ? []
- -iname 不区分大小写
- -regex pattern :使用正则表达式
- -user username:根据用户名查找
- -group
- -uid
- -gid
- -nouser
- -nogroup
- -type:
- f普通文件 : -type f
- d目录文件
- l链接文件
- c字符设备
- b块
- p管道
- s套接字
- -size:默认字节
- 【+|-】 # 【K|M|G】
- +10k 大于10k
- -10k小于10k
- 10k代表9k-10k之间的都显示
- 【+|-】 # 【K|M|G】
- 查看某段时间内改动创建的文件[+|-]# :+#至少#天;-#:#天内 ;#:#天
- -mtime内容改变
- -ctime权限属性改变
- -atime最后一次访问时间
- find ./ -mtime -5 -name ‘c‘
- 权限匹配:
- find ./ -perm mode精确: find ./ -perm 664
- find ./ -perm -mode只要有一项匹配即可
- find ./ -perm /mode mode以上才能匹配:755可以匹配644,750不可.
正则表达式:
- . 表示任意单个字符
- * 表示匹配前行字符任意次。
- \? 表示匹配前行字符0/1次:注意\ 是转义符。这个时候要和双引号一起使用。
- 位置锚定
- ^锚定行首: ‘^abc‘
- $锚定行尾: ‘abc$‘
- ^$ 空白行
- \< 锚定单词的词头, 等价于\b: grep \<root\>
- \> 锚定单词的词尾,等价于\b
- 分组:为了实现后向引用。
- cat a|grep "\(l..e\b\).*\1r":把文件a里面的内容中love lover/like liker之类的行挑选出来。
- [] 匹配指定范围任意单个字符
- [^]取反
- [a-zA-Z0-9]
- 特殊字符:[:space:][:punct:][:lower:][:upper:][:alpha:][:digit:][:alnum:]
- 扩展正则表达式中增加的功能:
- 次数:+:前行单字符出现至少一次。{m,n}前行单字符出现m到n次,含m,n。
- |:选择 grep -E "(C|c)at" :选出大小写的猫。
- grep的几个参数:
- -i 忽略大小写
- --color 加颜色
- -v 反向查找
- -o 只显示字符串
- {1..100}:自动展开成列表
- seq 5 10 序列:seq [起步 [步长]] [结束数]
- `ls /etc`
字符编辑:
- |:管道,前一个命令的输出作为后一个命令的输入
- 输入输出:
- 0 标准输入
- 1 标准输出
- 2 错误输出
- > >> 覆盖输出和追加输出
- < << 覆盖输入和追加输入
- set -C 如果某个文件存在禁用>
- >| 强制覆盖(当set -C时是不允许覆盖的)
- set +C取消禁用
- &> => + 2> 常用&>/dev/null
- cmd [] []<< EOF 脚本中使用,用来解决脚本中运行交互式程序的问题。
- EOF
- cat
- -n显示行号, -E显示行结束符$
- tac将cat的内容反写
- Less:翻页设置见Man。弱化的功能为more
- tail/head -n20 文件名
- cut -d: -f1 /etc/pasword 默认是空格
- tr ‘ab‘ ‘AB‘ < 文件名:针对单个字符操作。
- tr -d ‘ab‘ 碰到a和b就删除。
- ‘a-z‘ ‘A-Z‘转换大小写,‘ab‘ ‘cd‘ a换c,b换d
- sort 默认按ASCII码升序
- sort -t: -k3 -n -r /etc/passwd|cut -d: -f3
- -f 忽略大小写
- -u 相同的只显示一行
- Uniq:行必须相邻
- -d 只会显示重复的行一次 /其它行不会显示
- -D 重复的行全部显示/其它不重复行不显示
- -c 在行首显示重复的次数/不可以和D共用
- wc :结果返回:行 字母数 字节数
- -l行数 -w单词数 -c字节数 -m字符数 -L最长行的字符数
- $# 传给脚本的参数数量
$0 脚本本身的名字
$1 传递给该shell脚本的第1个参数
$2 传递给该shell脚本的第2个参数
$@ 传给脚本的所有参数的列表
$* 以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 脚本运行的当前进程ID号
$? 命令执行结果反馈,0表示执行成功,其余数字表示执行不成功:exit n. - 查看cmd本身信息:命令 cmd
- whatis:显示命令在Man的哪一个章节
- type:是否shell内置命令,如果不是,会显示cmd is 目录
- which:获取命令的目录。
- 系统环境设置:
- date; date +%s;
- clock
- hwclock -s; hwclock -w
- ls -i 文件 显示inode号
- ctl z送入后台并停止作业
- cmd [option] arg1 arg2 ...&:命令后台运行。
- bg:让后台停止的作业继续运行。
- jobs:查看后台所有的作业
- fg jobid:调回前台
- 命令和字符的转换
- ~: cd ~oracle
- -: cd -
- {}: touch {a, b, c, d}{m,n}会创建8个文件。
- ··:反引号,可以展开命令结果。
- ${}:括号内的命令执行结构也会被展开。也可以放入变量。不发生歧义情况下,可以省略{}.
- “”:双引号,在双引号中变量会展开为变量值
- ‘’:单引号,变量不会展开,只能作为字符。
- \:转义,会使特殊字符变成普通字符。
- 命令行编辑
- ctl a/e:光标快速到行首或行尾。
- ctl k/u:从光标处删除到行首/尾。
- ctl -> <-:跳跃单词
- ctl L:清屏
- !执行历史命令,!n执行第n行,!!执行上一条,!字符,给定字符最近一次。
- 命令别名:alias cmd=‘cmd [option1] [option2]‘
- 文件名通配:
- *:任意长度任意字符
- ?:任意单字符
- []:制定范围内的任意单字符
- [a-zA-Z0-9]
- 特殊字符:[:space:][:punct:][:lower:][:upper:][:alpha:][:digit:][:alnum:]
- 特殊字符集合中的任意一个需要加双中括号:[[:alnum:]]
- 超级常用命令:
- cp 源1 源2... 目的:不管源多少目的只有一个。
- -p:保留属性(o和g不变,正常拷贝,og会变成使用拷贝的用户的)
- -P:保持连接。拷贝链接本身,不过引用的路径只能是相对路径,如果链接自身位置变化,则链接会失效。
- -R/r递归复制。
- -f强制覆盖
- -L对软链接拷贝时,拷贝的实际上是背后的文件。
- -f强制覆盖
- mv 源1 源2 ...目的
- mv -t target scorce
- install source ... target
- install -d /dir :创建目录
- install -t target source...
- install 的文件自动有执行权限
- cp 源1 源2... 目的:不管源多少目的只有一个。
- 8个章节
- 所有用户使用的命令
- 表示系统调用
- 库调用
- 特殊文件
- 文件格式
- 游戏
- 杂项
- 管理命令
- 格式说明
- []可省略
- |多选一
- <>必须给出
- ...可以多次出现
- Name:命令名称及功能的简要说明
- Synopsis:用法说明,包括可用选项
- Desc:详细说明
- Options:每个选项的意义
- Files:相关配置文件
- Bugs:
- Examples:使用示例
- Man的页面操作:
- 翻页:space下一页,b上一页
- 翻行:回车下一行,k上一行
- 查找:/keyword 前--->后
- ?keyword 向前找
- n向后找下一个
- N向前找下一个
- 退出:Q/q
条件判断
- 整数测试:
- [ $A -eq $B ] :$A $B 的前后都有空格。等值为真
- [ $A -ne $B ] :$A $B 的前后都有空格。不等值为真
- [ $A -gt $B ] : >
- [ $A -lt $B ] : <
- [ $A -ge $B ] : >=
- [ $A -le $B ] : <=
- 文件测试:
- [ -e file ]:测试文件是否存在
- [ -f file ]:是否普通文件
- [ -d file ]:是否设备文件
- [ -r file ]:是否对当前用户可读
- [ -w file ]:可写
- [ -x file ]:可执行
- 字符串测试:
- [ $A == $B ]:
- [ $A != $B ]:
- 命令间的逻辑关系:有命令A 与B ,当命令顺利执行;返回值为真,否则反之.
- 当 A 为真时 && 执行B
- 当A为假,命令终止。
- 当 A 为假时 || 执行B
- 当A为真是,命令终止。
- A && B || C : 如果A顺利执行,那么接下来执行B,否则执行C。
- 如果A顺利执行,那么执行B,如果B顺利执行则命令终止。
- 如果A顺利执行,那么执行B,如果B执行报错则执行C。
- 如果A执行报错,跳过B,执行C。
- 当 A 为真时 && 执行B
- Shell中进行算术运算:注意$a+$b=a+b 是字符。
- let c=$a +$b
- c=$[$a+$b]
- c=$(($a+$b))
- c=`expr $a + $b`
- 选择结构
- 条件选择结构
- case SWITCH in
- value 1)
- statement...
- ;;
- value 2)
- statement...
- ;;
- *)
- statement ...
- ;;
- esac
- 例子:
- case $1 in
- [0-9])
- echo "A digit";;
- [a-z])
- echo "lower";;
- [A-Z])
- echo "upper";;
- *)
- echo "special";;
- esac
- 条件判断控制结构
- if condition1; then
- statement ...
- elseif conditon2; then
- statement ...
- elseif ...
- else
- statement ...
- fi
- 例:特点:可以跟多参数,无文件创建文件,有则统计程序运行该文件次数。
#! /bin/bash # declare -i line=0 while [ "$1" != "" ]; do if [ -e $1 ]; then echo "I m $1,and I am alive" line=`wc -l $1| cut -d" " -f1` let line=$[ $line + 1 ] echo "$line">>$1 echo "I am $1,and I am visited $line times" else touch $1 echo "fiel $1 created" fi shift done exit 0
- 条件选择结构
- 循环:
- for 循环
- for 变量 in 循环;do
- 循环体
- done
- while循环
- while 条件;do
- 循环体
- done
- for 循环
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。