• Shell 编程入门


    1.1、shell特性

    history 历史命令记录,root 用户默认存放文件~/.bash_history

    默认存放1000条记录

    查看记录数量 echo $HISTSIZE

    !! 上条命令

    !$上条命令最后一个参数

    !955 运行记录中第955条命令

    !c 选择最近的一条以c开头的历史命令运行,从下向上查找

    tab 补全命令和路径,按两下显示所有可补全的命令

    设置别名alias aaa='ls -la'

    取消别名unalias aaa

    *通配符 ls *.txt (会显示所有以.txt结尾的文件)

    只匹配一个字符 ls ?.txt (会显示单个字符名的.txt 文件;如 1.txt)

    | 管道符 将结果 赋予下一个命令(cat /etc/passwd|wc -l)

    > 重定向(echo "jdsfjf" > 1.txt 会覆盖1.txt 的内容)

    >> 追加重定向(不覆盖原有内容直接在原有内容上添加)

    <反向重定向(wc -l < 1.txt 把1.txt内容丢给命令处理)

    2>错误重定向(ls 111 2> 1.txt 将运行ls 111 提示的报错信息记录到 1.txt)

    2>>追加错误重定向 (ls 111 2>> 1.txt 在上次记录错误信息后,追加报错内容)

    ctrl+z 暂停 jobs查看暂定的进程数 fg 调到前台运行(+默认恢复的 fg 2 恢复 2的进程)bg 调到后台运行 jobs中显示会有&符号

    1.2、shell变量

    • 系统变量:

      env 查看系统环境变量

      echo $HOSTNAME 显示HOSTNAMT 变量的值(查看变量值

      或引用这个变量值需要添加$)

      set 显示系统变量(会显示 系统变量、自定义变量以及额外的变量)

    • 用户自定义变量:

      格式 a=1;b=2

      变量名只能是 字母、数字、下划线,数字不能开头

      注意:

      • 大写、命令、关键字等 字符尽量不要用作变量名(系统变量为大写)
      • 变量内容中有特殊字符,变量内容需要使用单引号(如:b='ls /tmp/' 空格为特殊字符)
      • 变量内容需要使用其他命令运行的结果,可以使用反引号(如 which vim 结果为/usr/bin/vim;myvim=which vimecho $myvim= /usr/bin/vim
      • b="$a"12 (b的值=变量a的值增加12,如:a=1 、echo $b为112;c="$a"b、echo $c为1112)

    bash 打开一个子shell exit退出子shell

    shell中export a=1 子shell 可以调用a=1 (export 全局变量)

    vim /etc/profile (所有的变量需要在所有的shell中生效 需要将这个变量加入这个文件)

    unset a(删除变量值,a为自定义的变量名称)

    1.3系统和用户的环境变量配置文件

    用户、系统环境变量配置文件:

    PATH HOME SELL

    vim /etv/profile (系统相关的 任何账户都生效)

    vim /etc/bashrc (可以设置PS1 值PS1='[u@h w]$ ' W绝对路径 w路径最后一个文件夹名 t 显示时间 如:[u@h w]$ ;设置umask)

    vim /etc/profile.d 环境变量定义文件(自动定义pata变量 vim etc/profile.d/path.sh ,新建一个path.sh的定义文件)

    source /etc/profile (使定义文件生效)
    【root用户命令输入位置是 # 符号;普通用户是 $ 符号;所有环境变量不建议直接修改配置文件,建议 /etc/profile.d 文件夹下添加.sh文件】

    • 家目录下的 部分文件

      .bash_history 保存的命令历史

      .bash_logout 用户退出时执行的命令,比如退出时删除历史命令,可以写入这个文件中

      .bash_profile 用户自己的环境变量配置,只对当前用户生效

      .bashrc 用户别名配置文件,当前用户生效

    1.4、shell中特殊符号

    特殊符号:

    * 通配符(通配多位 ?只能通配一位字符)
    # 配置文件、shell中 #这一行不运行,不生效;可以作为注释使用
     脱异符号 (如:ls #1.txt 只运行了ls 未识别到#1.txt  ls #1.txt将#1.txt作为文件名运行)
    | 管道符 把一条命令的结果 丢给后面一条命令
    $ 变量前添加这个符号,表示在使用这个变量
    !$ 最后的意思(如:ls !$ 会调用最后输入ls 的参数命令)vim 中!$ 指最后一行,最后一个字符、行尾deng
    ; 运行在命令的中间(如:`ls 1.txt;ls 3.txt`同时运行两个命令)
    ~ 用户的家目录(ls ~ 相当与ls root)
    & 把一个命令放到后台运行(如:sleep 2233 &  在后台运行sleep这个命令)
    && 
    >  重定向 
    >> 追加重定向
    2> 错误重定向
    2>>错误重定向
    <  错误追加重定向 反重定向(将右侧的文档内容 重定向给左侧的命令)
    [] 正则表达式中表示范围;命令中 ls [12].txt == ls 1.txt 2.txt ;ls [1-3].txt== ls 1.txt 2.txt 3.txt
    

    1.5、cut命令

    cut 将文件分段

    cat /etc/passwd

    -d: 以:号为分隔符;

    -f 3 显示第三段,显示多段的-f 3,4-f 3,6,5 显示 3段 然后6段 然后显示5段;如:cut -d: -f 3 /etc/passwd

    -c 显示第几个字符 如:cut -c 10 /etc/passwd 显示第10个字符 cut -c 1-10 /etc/passwd 显示1到10 的字符

    1.6、sort命令

    sort 排序使用 (默认以ASCII码 排序)

    格式:sort /etc/passwd

    -t 分隔符

    -k 选择第几段(sort -t: -k3 /etc/passwd 以:为分隔符 按照第3段内容排序;范围值 3,4 不是cut的- 如:sort -t: -k3,5 显示3到5段的内容 )

    -n 以数字排序 (如:sort -t: -k3 -n /etc/passwd)

    -r 反序排序,最小的在下面

    -u 排序去重复内容

    -un 字母开头的会识别成重复内容,如skj1 a weotj 都会认为是重复内容,只显示数字内容

    1.7、wc命令

    -l 显示行数 (如:wc -l.txt)

    -w 统计文本中word(单词)数量

    -m 统计文本字符数(换行符也会被统计)

    1.8、uniq和tee命令

    uniq 去重复
    -c 统计重复数量(格式:uniq -c 1.txt)
    重复内容不在邻近行,无法去重复(sorf 2.txt |uniq -c 先排序,然后在去重复)
    tee 重定向 并显示(格式:echo "1234" |tee 1.txt)

    1.9、tr和split命令

    • tr替换字符

      ls *.txt |tr 'a-z' 'A-Z' 将所有的.txt文件名中的小写替换成大

    • split 切割文件

      split -p 50m 1.txt 按大小分隔(单位为B 不用写单位)

      split -l 100 1.txt 按行分隔

      自定义分隔后文件名: split -p 20 1.txt new_ (new_ 为分隔后文件 开头名称)

    2.0、shell中连接符(并且、和、或者)

    并且、或者(&& ||)

    && 左边命令执行成功后,才会运行右边的命令
    || 左边命令执行不成功,才会执行右边的命令
    ; 左边命令执行成功与否,都会执行右边的命令

  • 相关阅读:
    实战:垂直电商如何撬动“女人腰包”
    谈谈项目收尾
    项目管理心得:一个项目经理的个人体会、经验总结
    IT项目经理沟通技巧的重要性
    项目跟踪:项目跟踪要跟踪什么呢?
    会员营销,你真的做到了吗?
    Git入门——基础知识问答
    文摘:威胁建模(STRIDE方法)
    写在2015年工作的第一天
    简化工作——我的bat文件
  • 原文地址:https://www.cnblogs.com/cy-8593/p/9512456.html
Copyright © 2020-2023  润新知