Shell Notes

查找:

  1. find:
    1. 实时查找,精确,速度慢,支持正则
    2. find 查找路径 查找标准 查到后处理动作
    3. 查找路径默认当前目录,查找标准默认路径下所有文件,动作默认打印到屏幕
    4. 匹配标准:
      1. -name ‘filename‘ :精确匹配:通配:* ? []
      2. -iname 不区分大小写
      3. -regex pattern :使用正则表达式
      4. -user username:根据用户名查找
      5. -group
      6. -uid
      7. -gid
      8. -nouser
      9. -nogroup
      10. -type:
        1. f普通文件 : -type f
        2. d目录文件
        3. l链接文件
        4. c字符设备
        5. b块
        6. p管道
        7. s套接字
      11. -size:默认字节
        1. 【+|-】 # 【K|M|G】 
          • +10k 大于10k
          • -10k小于10k
          • 10k代表9k-10k之间的都显示
      12. 查看某段时间内改动创建的文件[+|-]# :+#至少#天;-#:#天内 ;#:#天
        1. -mtime内容改变
        2. -ctime权限属性改变
        3. -atime最后一次访问时间
        • find ./ -mtime -5 -name ‘c‘
      13. 权限匹配:
        1. find ./ -perm mode精确: find ./ -perm 664 
        2. find ./ -perm -mode只要有一项匹配即可
        3. find ./ -perm /mode mode以上才能匹配:755可以匹配644,750不可.

正则表达式:
  1. . 表示任意单个字符
  2. * 表示匹配前行字符任意次。
  3. \? 表示匹配前行字符0/1次:注意\ 是转义符。这个时候要和双引号一起使用。
  4. 位置锚定
    1. ^锚定行首: ‘^abc‘
    2. $锚定行尾: ‘abc$‘
    3. ^$ 空白行
    4. \< 锚定单词的词头, 等价于\b: grep \<root\>
    5. \> 锚定单词的词尾,等价于\b
  5. 分组:为了实现后向引用。
    1. cat a|grep "\(l..e\b\).*\1r":把文件a里面的内容中love lover/like liker之类的行挑选出来。
  6. [] 匹配指定范围任意单个字符
    1. [^]取反
    2. [a-zA-Z0-9]
    3. 特殊字符:[:space:][:punct:][:lower:][:upper:][:alpha:][:digit:][:alnum:]
  7. 扩展正则表达式中增加的功能:
    1. 次数:+:前行单字符出现至少一次。{m,n}前行单字符出现m到n次,含m,n。
    2. |:选择 grep -E "(C|c)at" :选出大小写的猫。
  8. grep的几个参数:
    1. -i 忽略大小写
    2. --color 加颜色
    3. -v 反向查找
    4. -o 只显示字符串
如何生成列表:
  1. {1..100}:自动展开成列表
  2. seq 5 10 序列:seq [起步 [步长]] [结束数]
  3. `ls /etc`

字符编辑:
  1. |:管道,前一个命令的输出作为后一个命令的输入
  2. 输入输出:
    • 0  标准输入
    • 1  标准输出
    • 2  错误输出
    • >  >>  覆盖输出和追加输出
    • <  <<  覆盖输入和追加输入
    • set -C 如果某个文件存在禁用>
    • >| 强制覆盖(当set -C时是不允许覆盖的)
    • set +C取消禁用
    • &> => + 2> 常用&>/dev/null
    • cmd [] []<< EOF    脚本中使用,用来解决脚本中运行交互式程序的问题。
    • EOF
  3. cat
    • -n显示行号, -E显示行结束符$
    • tac将cat的内容反写
  4. Less:翻页设置见Man。弱化的功能为more
  5. tail/head -n20 文件名
  6. cut -d: -f1 /etc/pasword 默认是空格
  7. tr ‘ab‘ ‘AB‘ < 文件名:针对单个字符操作。
    • tr -d ‘ab‘ 碰到a和b就删除。
    • ‘a-z‘ ‘A-Z‘转换大小写,‘ab‘ ‘cd‘ a换c,b换d
  8. sort 默认按ASCII码升序
    • sort -t: -k3 -n -r /etc/passwd|cut -d: -f3 
    • -f 忽略大小写
    • -u 相同的只显示一行
  9. Uniq:行必须相邻
    • -d 只会显示重复的行一次 /其它行不会显示
    • -D 重复的行全部显示/其它不重复行不显示
    • -c 在行首显示重复的次数/不可以和D共用
  10. wc :结果返回:行 字母数 字节数
    • -l行数 -w单词数 -c字节数 -m字符数 -L最长行的字符数
通用命令行命令:
  1. $# 传给脚本的参数数量
    $0 脚本本身的名字
    $1 传递给该shell脚本的第1个参数
    $2 传递给该shell脚本的第2个参数
    $@ 传给脚本的所有参数的列表
    $* 以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
    $$ 脚本运行的当前进程ID号
    $? 命令执行结果反馈,0表示执行成功,其余数字表示执行不成功:exit n.
  2. 查看cmd本身信息:命令 cmd
    1. whatis:显示命令在Man的哪一个章节
    2. type:是否shell内置命令,如果不是,会显示cmd is 目录
    3. which:获取命令的目录。
  3. 系统环境设置:
    1. date; date +%s;
    2. clock
    3. hwclock -s; hwclock -w
    4. ls -i 文件 显示inode号
    5. ctl z送入后台并停止作业
    6. cmd [option] arg1 arg2 ...&:命令后台运行。
    7. bg:让后台停止的作业继续运行。
    8. jobs:查看后台所有的作业
    9. fg jobid:调回前台
  4. 命令和字符的转换
    1. ~: cd ~oracle
    2. -: cd -
    3. {}: touch {a, b, c, d}{m,n}会创建8个文件。
    4. ··:反引号,可以展开命令结果。
    5. ${}:括号内的命令执行结构也会被展开。也可以放入变量。不发生歧义情况下,可以省略{}.
    6. “”:双引号,在双引号中变量会展开为变量值
    7. ‘’:单引号,变量不会展开,只能作为字符。
    8. \:转义,会使特殊字符变成普通字符。
  5. 命令行编辑
    1. ctl a/e:光标快速到行首或行尾。
    2. ctl k/u:从光标处删除到行首/尾。
    3. ctl -> <-:跳跃单词
    4. ctl L:清屏
    5. !执行历史命令,!n执行第n行,!!执行上一条,!字符,给定字符最近一次。
    6. 命令别名:alias cmd=‘cmd [option1] [option2]‘
  6. 文件名通配:
    1. *:任意长度任意字符
    2. ?:任意单字符
    3. []:制定范围内的任意单字符
    4. [a-zA-Z0-9]
    5. 特殊字符:[:space:][:punct:][:lower:][:upper:][:alpha:][:digit:][:alnum:]
    6. 特殊字符集合中的任意一个需要加双中括号:[[:alnum:]]
  7. 超级常用命令:
    1. cp 源1 源2... 目的:不管源多少目的只有一个。
      • -p:保留属性(o和g不变,正常拷贝,og会变成使用拷贝的用户的)
      • -P:保持连接。拷贝链接本身,不过引用的路径只能是相对路径,如果链接自身位置变化,则链接会失效。
      • -R/r递归复制。
      • -f强制覆盖
      • -L对软链接拷贝时,拷贝的实际上是背后的文件。
      • -f强制覆盖
    2. mv 源1 源2 ...目的
      • mv -t target scorce
    3. install source ... target
      • install -d /dir :创建目录
      • install -t target source...
      • install 的文件自动有执行权限
Man 
  1. 8个章节
    1. 所有用户使用的命令
    2. 表示系统调用
    3. 库调用
    4. 特殊文件
    5. 文件格式
    6. 游戏
    7. 杂项
    8. 管理命令
  2. 格式说明
    1. []可省略
    2. |多选一
    3. <>必须给出
    4. ...可以多次出现
    5. Name:命令名称及功能的简要说明
    6. Synopsis:用法说明,包括可用选项
    7. Desc:详细说明
    8. Options:每个选项的意义
    9. Files:相关配置文件
    10. Bugs:
    11. Examples:使用示例
  3. Man的页面操作:
    1. 翻页:space下一页,b上一页
    2. 翻行:回车下一行,k上一行
    3. 查找:/keyword 前--->后
      • ?keyword 向前找
      • n向后找下一个
      • N向前找下一个
    4. 退出:Q/q

条件判断

  1. 整数测试:
    1. [ $A -eq $B ] :$A $B 的前后都有空格。等值为真
    2. [ $A -ne $B ] :$A $B 的前后都有空格。不等值为真
    3. [ $A -gt $B ] : >
    4. [ $A -lt $B ] : <
    5. [ $A -ge $B ] : >=
    6. [ $A -le $B ] : <=
  2. 文件测试:
    1. [ -e file ]:测试文件是否存在
    2. [ -f file ]:是否普通文件
    3. [ -d file ]:是否设备文件
    4. [ -r file ]:是否对当前用户可读
    5. [ -w file ]:可写
    6. [ -x file ]:可执行
  3. 字符串测试:
    1. [ $A == $B ]:
    2. [ $A != $B ]:
  4. 命令间的逻辑关系:有命令A 与B ,当命令顺利执行;返回值为真,否则反之.
    1. 当 A 为真时 &&  执行B
      • 当A为假,命令终止。
    2. 当 A 为假时 ||  执行B
      • 当A为真是,命令终止。
    3. A && B || C : 如果A顺利执行,那么接下来执行B,否则执行C。
      • 如果A顺利执行,那么执行B,如果B顺利执行则命令终止。
      • 如果A顺利执行,那么执行B,如果B执行报错则执行C。
      • 如果A执行报错,跳过B,执行C。
  5. Shell中进行算术运算:注意$a+$b=a+b 是字符。
    1. let c=$a +$b
    2. c=$[$a+$b]
    3. c=$(($a+$b))
    4. c=`expr $a + $b`
  6. 选择结构
    1. 条件选择结构
      • 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
    2. 条件判断控制结构
      • 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
  7. 循环:
    1. for 循环
      • for 变量 in 循环;do
      • 循环体
      • done
    2. while循环
      • while 条件;do
      • 循环体
      • done

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。