美文网首页
Linux——Shell

Linux——Shell

作者: uq | 来源:发表于2020-05-17 21:54 被阅读0次
    • Shell是一个命令行解释器,实现命令和机器码互转
    • Shell是一门编程语言,是一种解释执行的脚本语言

    分类

    • Bourne Shell
      • sh
      • ksh
      • Bash
      • psh
      • zsh
    • C Shell
      • csh
      • tcsh
    • /etc/shells 查看支持的shell

    Bash操作

    • bash 进入bash
    • exit 退出bash
    • \ 命令换行
    • 历史命令
      • 上下箭头调出历史命令
      • 单击Tab键补全,双击Tab键列出所有相似
      • ![num] 重复执行第num条命令
      • !! 重复执行上一条
    • 快捷键
      • 快捷键传送门
      • ctrl+c 中断
      • ctrl+l 清屏,clear命令清屏
      • ctrl+u 剪切光标之前的命令
      • ctrl+y 粘贴
      • ctrl+r 历史命令中搜索
      • ctrl+d 结束符,退出当前终端
      • ctrl+a 移到行首
      • ctrl+e 移到行尾
      • ctrl+z 暂定,放入后台
      • ctrl+s 暂停屏幕输出
      • ctrl+q 恢复屏幕输出

    脚本基础

    • 文件后缀 .sh
    • 文件头 #!/bin/bash
    • # 注释
    • 执行脚本
      • bash xxx.sh
      • 赋予权限执行
        • chmod 755 xxx.sh
        • ./xxx.sh

    标准输入输出

    设备 设备文件名 文件描述符 类型
    键盘 /dev/stdin 0 标准输入
    显示器 /dev/stdout 1 标准输出
    显示器 /dev/stderr 2 标准错误输出
    • 输出重定向
      • [命令] >[文件] 保存正确结果,覆盖模式
      • [命令] >>[文件] 保存正确结果,追加模式
      • [命令] 2>[文件] 保存错误信息,覆盖模式
      • [命令] 2>>[文件] 保存错误信息,追加模式
      • [命令] > [文件] 2>&1 保存正确和错误,覆盖模式
      • [命令] >> [文件] 2>&1 保存正确和错误,追加模式
      • [命令] &>[文件] 保存正确和错误,覆盖模式
      • [命令] &>>[文件] 保存正确和错误,追加模式
      • [命令] >> [文件1] 2>>[文件2] 正确追加到文件1,错误追加到文件2
    • 输入重定向
      • wc < [文件名]
        • 把文件作为命令输入

    多命令

    • ; 连接多个命令
    • && 逻辑与,命令1成功,执行命令2
    • || 逻辑或,命令1失败,执行命令2
    • | 管道符,命令1的正确输出作为命令2的操作对象
      • ll /etc | more
      • netstat -an | grep [keywords]
    • & 任务在后台执行

    通配符和特殊字符

    • 通配符
      • ? 一个任意字符
      • * 0或多个任意字符
      • [] 中括号中任意一个字符
      • [-] 中括号中任意一个字符,-代表范围
      • [^] 不是中括号中的字符
    • 特殊字符
      • '' 单引号中所有特殊字符都没有特殊含义,原样输出
      • "" 双引号中所有特殊字符都没有特殊含义
        • 但是以下除外
        • $ 调用变量的值
        • ` 反引号,引用命令
        • \ 转义符
      • $() 引用系统命令
      • `` 反引号扩起来的内容是系统命令,和$()作用一样
      • # 代表注释
      • & 后台执行
        • find / -name xxx.sh &
      • \ 转义字符,在\之后的特殊符号将时区特殊含义,变为普通字符

    命令

    • echo [内容]
      • 输出字符
      • -e 转义字符
        • \ 输出\
        • \a 警告音
        • \b 退格键
        • \c 取消行末换行符
        • \e escape键
          • echo -e "\e[1;31m abcd \e[0m"
            • 30m 黑色
            • 31m 红色
            • 32m 绿色
            • 33m 黄色
            • 34m 蓝色
            • 35m 洋红
            • 36m 青色
            • 37m 白色
        • \f 换页
        • \n 换行
        • \r 回车键
        • \t 制表符,tab键
        • \v 垂直制表符
        • \0nnn 八进制ASCII码
        • \xhh 十六进制ASCII码
      • echo -e "a\tb\tc"
    • dos2unix [文件]
      • windows编码转换为Linux编码
      • 2 two to
      • 4 four for
    • history
      • 查看历史命令
        • 默认保存1000条,/etc/profile,HISTSIZE
      • -c 清空历史命令
      • -w 把缓存中的历史命令写入历史命令保存文件
        • ~/.bash_history
    • alias
      • 查看别名
    • alias [别名]=[command]
      • 设置别名,临时生效
      • /root/.bashrc
    • unalias [别名]
      • 删除别名

    变量

    • 分类
      • 用户自定义变量/本地变量
      • 环境变量,系统操作环境相关的数据
        • 环境变量建议大写
      • 位置参数变量,脚本参数
      • 预定义变量
    • 用户自定义变量/本地变量
      • 声明赋值
        • [变量名]=[变量值]
        • name=zhangsan
        • name="zhang san"
        • name="$date"
        • name=$(date)
      • 连接
        • info=hello"$name"
        • info=hello${name}
      • 调用
        • $name
      • 查看所有变量
        • set
      • 删除
        • unset name
    • 环境变量
      • 声明赋值
        • export [变量名]=[变量值]
        • export [本地变量]
      • 查询
        • env
      • 调用
        • $[变量名]
      • 删除
        • unset [变量名]
      • 常见环境变量
        • PATH
          • 系统查找命令的路径
          • echo $PATH
          • PATH="$PATH":/xxx 追加
        • PS1
          • 系统提示符格式 [root@localhost ~]#
            • $ root提示#,普通用户提示$
          • echo $PS1
    • 位置参数变量
      • $n 命令行参数传递给脚本
        • $0 命令本身
        • $1-$9 第1到9个参数
        • ${10} 10个以上参数
        • bash xxx.sh zhangsan 18
          • $0 xxx.sh
          • $1 zhangsan
          • $2 18
      • $* 所有参数,一个字符
      • $@ 所有参数,字符数组
      • $# 参数个数
    • 预定义变量
      • $? 最后一次执行命令的返回状态
        • 0 执行正确
        • 非0 执行不正确
      • $$ 当前进程的PID
      • $! 最后一个后台进程的PID
    • read [变量名]
      • 接受键盘输入
      • -p [提示信息] 提示信息
      • -t [描述] 等待用户输入,等待时间
      • -n [字符数] 只接受指定字符数
      • -s 隐藏输入的数据

    数值运算与运算符

    • declare [+/-][选项] [变量名]
      • 声明变量类型
      • - 为变量设定类型属性
      • + 取消变量的类型属性
      • -i 整型
      • -x 环境变量
      • -p 显示变量的类型
        • declare -p [变量名]
    • 数值运算
    #! /bin/bash
    
    num1=$1
    num2=$2
    declare -i sum=$num1+$num2
    echo "方式一:$sum"
    
    echo "方式二:$(expr $num1 + $num2)"
    
    echo "方式三:$(($num1+$num2))"
    echo "方式三:$[$num1+$num2]"
    
    • 运算符
      • + - * / % && ||

    环境变量配置文件

    • source [配置文件]
      • 使配置文件生效,另一种写法 . [配置文件]
    • 配置文件
      • 所有用户生效
        • /etc/profile
          • USER
          • LOGNAME
          • MAIL
          • PATH
          • HOSTNAME
          • HISTSIZE
          • umask
          • 调用/etc/profile.d/*.sh
        • /etc/profile.d/*.sh
        • /etc/bashrc
          • PS1
          • umask
          • PATH
          • 调用/etc/profile.d/*.sh
      • 只对用户生效
        • ~/.bash_profile
          • 调用~/.bashrc
        • ~/.bashrc
      • 用户登录时读取顺序
        • /etc/profile
          • /etc/profile.d/*.sh
        • ~/.bash_profile
          • ~/.bashrc
        • /etc/bashrc
      • ~/.bash_logout
        • 注销时读取
      • ~/.bash_history
        • 命令历史
      • /etc/issue
        • 本地终端欢迎信息
      • /etc/issue.net
        • 远程终端欢迎信息
      • /etc/motd
        • 登录后欢迎信息

    正则表达式

    • 在文件中匹配符合条件的字符串
      • grep awk sed 支持正则表达式
    • * 前一个字符匹配0次或任意多次
    • . 匹配除了换行符外任意一个字符
    • ^ 匹配行首
    • $ 匹配行尾
    • [] 匹配中括号中任意一个字符
    • [^] 匹配中括号字符意外的任意一个字符
    • \ 转义符
    • {n} 前面的字符出现n次
    • {n,} 前面的字符至少出现n次
    • {n,m} 前面的字符至少出现n次,最多出现m次

    字符处理

    • cut [文件名]
      • 列提取
      • -f [第几列,..] 获取列信息
      • -d [分隔符] 指定分隔符,默认制表符
      • cut -f 1 -d : /etc/passwd
    • printf '[输出格式][输出类型]' [输出内容]
      • 格式化输出
      • 类型
        • $ns 字符串
        • %ni 整数
        • %m.nf 小数
          • %8.2 输出8位,6位整数,2位小数
      • 格式
        • \a 警告音
        • \b 退格键
        • \f 清屏
        • \n 换行
        • \r 回车
        • \t 水平制表符
        • \v 垂直制表符
      • printf '%s %s\n' 1 2 3 4 5 6
    • awk [选项] '条件{动作}...' [文件名]
      • 文本分析工具
      • 选项
        • -F[分隔符] 指定分隔符
      • 条件
        • 关系表达式
      • 动作
        • 格式化输出
        • 流程控制语句
      • df -h | awk '{print $1 "\t" $3}'
        • print 输出,行尾换行
        • 打印第一列和第三列信息
    • sed [选项] '[动作]' [文件名]
      • 流编辑器,对数据进行选取、替换、删除、新增
      • 选项
        • -n 将sed处理的结果输出到屏幕
        • -e 允许对输入数据进行多条sed命令编辑,用;分隔
        • -i sed修改的结果保存到文件,默认不会修改文件,修改的是输出
      • 动作
        • a [数据] \ 追加,除最后一行,每行用\结尾
        • c [数据] \ 行替换,除最后一行,每行用\结尾
        • i [数据] \ 插入,除最后一行,每行用\结尾
        • d 删除
        • p 打印
        • s/[旧字符串]/[新字符串]/g 字符串替换
      • sed -n '2p' xxx
        • 输出第2行
      • sed '2,4d' xxx
        • 删除第2到4行
      • sed '2a hello ' xxx
        • 第二行追加hello
    • sort [文件名]
      • 排序
      • -f 忽略大小写
      • -n 以数值型进行排序,默认使用字符串型排序
      • -r 反向排序
      • -t [分隔符] 指定分隔符,默认是制表符
      • -k [n,m] 指定字段排序,-k [2,2] 指定第二个字段排序
    • wc [文件名]
      • -c 统计字节数
      • -w 统计单词数
      • -l 统计行数

    条件判断

    • 文件类型
      • -d 文件是否存在,存在且为目录,则真
      • -e 文件是否存在
      • -f 文件是否存在,存在且为普通文件,则真
      • -L 文件是否存在,存在且为符号链接文件,则真
    • 文件权限
      • -r 文件是否存在,存在且有读权限,则真
      • -w 文件是否存在,存在且有写权限,则真
      • -x 文件是否存在,存在且有执行权限,则真
    • 文件间比较
      • [文件1] -nt [文件2] 文件1修改时间是否比文件2新
      • [文件1] -ot [文件2] 文件1修改时间是否比文件2旧
      • [文件1] -ef [文件2] 文件1是否和文件2的inode一致,是否为同一文件
    • 两个整数之间比较
      • num1 -eq num2 等于
      • num1 -ne num2 不等于
      • num1 -gt num2 大于
      • num1 -lt num2 小于
      • num1 -ge num2 大于等于
      • num1 -le num2 小于等于
    • 字符串判断
      • -z 字符串 是否为空
      • -n 字符串 是否非空
      • str1 == str2
      • str1 != str2
    • 检查条件
      • test -f 文件[-f 文件]

    流程控制

    • 单分支if条件语句
    if [ 条件判断 ];then
    ...
    fi
    
    if [ 条件判断 ]
        then
            ...
    fi
    
    • 多分支if条件语句
    if [ 条件判断 ]
        then
            ...
    elif [ 条件判断 ]
        then
            ...
    else
        ...
    fi
    
    • exit

      • 退出脚本
      • exit [num]
    • 多分枝case条件语句

      • 只能判断一种条件
    case $变量 in
        "值")
            ...
            ;;
        "值")
            ...
            ;;
        *)
            ...
            ;;
    esac
    
    • for循环
    for 变量 in 值1 值2...
        do
            ...
        done
    
    for ((i=1;i<=100;i=i+1))
        do
            ...
        done
    
    • while循环
      • 不定循环,条件成立则循环
    while [ 条件判断 ]
        do
            ...
        done
    
    • until循环
      • 不定循环,条件不成立则循环
    while [ 条件判断 ]
        do
            ...
        done
    

    实例

    • 远程下载文件输出内容到屏幕
    #!/bin/bash
    
    if [ ! -d "./downloads/" ];then
            mkdir downloads
    fi
    
    cd downloads
    
    wget http://xxx.com/xxx.zip
    echo 下载完成
    
    unzip xxx.zip
    echo 解压完成
    
    rm -f xxx.zip
    
    content=$(cat xxx.txt)
    echo ===输出开始===
    echo -e "\e[1;32m$content\e[0m"
    echo ===输出结束===
    
    rm -f xxx.txt
    

    相关文章

      网友评论

          本文标题:Linux——Shell

          本文链接:https://www.haomeiwen.com/subject/svlnnhtx.html