第十章_Bash

 


1.shell 是什么?

命令解析器-接收用户输入的命令,然后调取相应的程序

2.查看当前系统做支持的shell类型

复制代码
    #查看当前系统做支持的shell类型
        `cat /etc/shells`
            [root@gaocun ~]# cat /etc/shells
            /bin/sh
            /bin/bash #常用
            /usr/bin/sh
            /usr/bin/bash
            /bin/tcsh
            /bin/csh
        
    #查看用户登入后指定的shell
        `cat /etc/passwd` 第七栏
         root:x:0:0:root:/root:/bin/bash
复制代码

3.查看当前登入用户命令执行记录

#方式1
cat ~/.bash_history
#方式2
[root@gaocun ~]# history
 3050  05/05/22 15:08:31 last
 3051  05/05/22 15:11:15 `cat ~/.bash_history`
 3052  05/05/22 15:11:44 history

4.bash命令输入行相关操作

复制代码
    代码补全/路径补全
        `[tab] 第一个command --命令补全`
        `[tab] 第二个path  --档案补全`
    删除输入命令
        `[ctl]+u 删除光标之前内容`
        `[ctl]+k 删除光标之后内容`
    移动光标
        `[ctl]+a 将光标移动到行首`
        `[ctl]+e 将光标移动到行尾`
复制代码

5.alias的设置

复制代码
    查看当前环境已经设置的alias
        alias [aliasName]
    在当前环境添加alias
        alias gaocun='echo alias setup'
        *这样设置是当前session有效
    删除别名
        unalias [aliasName]
    在所有环境添加alias(永久生效)
        所有用户有效
            将设置命令写入到/etc/bashrc中
        指定用户有效
            将设置命令写入到~/.bashrc中
复制代码

6.bash环境启动都执行了那些档案呢?

复制代码
登入方式 : login shell
        /etc/profile(系统整体设置)
        ~/.bash_profile(用户级别)  
               只会按照上面顺序读取一个
                 ~/.bashrc
                 ~/.bash_profile
                 ~/.bash_login
                 ~/.profile

登入方式 : non login shell
      只会读取   ~/.profile

其他设置档案 :
       ~/.bash_history 记录历史命令
       ~/.bash_logout 登出时执行

note : 当修改后需要重新登入或者source才能生效设置的相关配置
                 
复制代码

7. bash中的 通配符和占位符

    `通配符 : *`
    `占位符 : ?`

8.查看bash执行命令的类型 type

复制代码
    说明: bash 接收的命令有三种类型
             file-外部指令 
                 spark-sql
             alias-别名 
                 vi
             builtin-bash内建指令
                 cd、alias、echo
    `type command`
        [root@gaocun ~]# type spark-sql cd cls
        spark-sql is /home/software/spark-3.2.1-local/bin/spark-sql
        cd is a shell builtin
        cls is aliased to `clear'
复制代码

9.bash 中的变量

9.1 给变量赋值

复制代码
    1.赋值指令
        var='变量内容'
        var="变量内容"
        var=`command`
        var=$(command)
    2.=两边不能有空白字符   
        错误示例 var = 2222
    3.'、"、`、$() 的区别
        var='变量内容' 
            说明 :
                原样输出字符串
                    无法进行变量替换 '$var'❎
                    原样输出字符串,不进行转义或取变量(用单引号) 如 echo '!'
        var="变量内容"
            说明 :
                可以进行变量替换"$var"✅
                可以识别特殊符号,打印特殊符号时需要转义 如 echo “/!”
        var=`command` 同 var=$(command)
            说明 :
                将command的执行结果,赋值给变量
    4.变量命名规范
        环境变量大写 JAVA_HOME、SPARK_HOME
        自定义变量小写 var=100
复制代码

9.2 打印变量

方式1: echo-将字符串标准输出stdout
复制代码
    方式1: echo-将字符串标准输出stdout
        格式: echo -参数 字符串
        参数设置: -e 启用转义字符\
                 -n  取消结尾添加换行符\n (默认情况下,每次调用echo会在最后添加一个换行符\n)
        颜色设置:
            格式 : echo -e "\033[背景颜色;文字颜色m  str  \033[0m"
                  echo -e "\e[背景颜色;文字颜色m  str  \e[0m"
            背景颜色 : 40-47
            字体颜色 : 30-37
            动作 : \33[0m 关闭所有属性
                  \33[1m 设置高亮度
                  \33[4m 下划线
                  \33[5m 闪烁
            示例 : 
                echo -e "\e[41;25m  str  \e[1m"
复制代码
方式2: printf-格式化并打印数据  
复制代码
    方式2: printf-格式化并打印数据  
        格式: printf  "指定格式"  data1 data2
        格式替换符 : 
                %s - 字符串
                %c - 字符
                %d - 整数
                %f - 浮点
                %-5s
                    - 左对齐(不指定时为右对齐)
                    5 任何字符串都内容都会被5个字符宽度显示,字符串不足5字符时会被空格符填充
                %4.2f - 保留2位小数
复制代码

9.3 删除变量

unset 变量名称

9.4 环境变量

复制代码
    1.常见的环境变量    
          HOME 用户路径
          SHELL 当前用户的解释器
          BASH_VERSION  bash版本
          HISTSIZE 记录历史命令笔数(内存)
          PATH 搜索文档的路径 
          LANG 当前的语系
          BASH=/bin/bash BASH解释器路径
          HISTFILE=/home/dmtsai/.bash_history 命令记录历史文件存储位置
          $ 当前进程的pid
          ? 上个命令的返回值
          PS1=[\u@\h \W]\$ 命令提示符
            [root@gaocun ~]# echo $PS1
            [\u@\h \W]\$

    2.打印当前环境下的环境变量
        env (打印当前环境下的环境变量)
    
        export (打印当前环境下的环境变量)
            export 变量名(将变量导出到子进程中去/将变量设置为环境变量-env可查)
                     
        set (打印当前环境下的所有变量)
    
    3.将印当前环境下的环境变量 导出到子进程中去   
            export 变量名 

4.环境变量和普通变量的区别
       
普通变量只在当前进程内有效
       环境变量在所有进程内有效

复制代码

9.5  接收键盘输入内容给变量赋值

    格式 : read -参数 变量名称
    参数 : -p 提示内容
          -t  等待接收信息的秒数(过期后自动退出)
    示例 :
        read -p "请输入option:" -t 5 option

 9.6 bash 中的数组

复制代码
    #定义数组
        arr=("" "" "") #用空白符做元素分割
        arr1[0]=""
        arr1[1]=""
        arr1[2]="寿"
    #读取数组元素
        echo ${arr[0]},${arr[1]},${arr[2]}
    #获取数组长度
        echo ${#arr[*]} or ${#arr[@]}
    #打印数组
        echo ${arr[@]} or ${arr[*]}
    #打印数组索引
        echo ${!arr[*]]}
    #遍历数组
复制代码

9.7  declare(声明变量类型,默认为字符串)

复制代码
    说明:
        bash有两种方式来声明变量
            方式1: var=变量内容 #默认数据类型为字符串
            方式2: declare -参数 var=变量内容 #数据类型为参数指定的数据类型    
    示例:
        声明数组
            declare -a arr=("" "" "")
        声明int   
            declare -i sum=1+2+3
        将变量声明为环境变量
            declare -x sum=1+2+3
        将变量声明为只读变量
            declare -r var=readonly
        查看变量类型
            declare -p var
复制代码

9.8  获取字符串长度(字符数)

${#var}
[root@gaocun ~]# sum=123;echo ${#sum}
3

 10.设置语言环境

复制代码
查看当前环境语系   
[root@gaocun ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
复制代码

11.ulimit 限制用户资源

复制代码
    ulimit -a 查询当前用户限制
    [root@gaocun ~]# ulimit -a
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited #打开文件数量
    pending signals                 (-i) 15071
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 100001
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 8192
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 15071
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited
    
    ulimit -f  value 限制用户所属文件的大小(单位为kbyte)
    ulimit -f  100
复制代码

12.history 查询历史命令

    打印进x笔命令   
        history 100
    清除所有历史命令 
        history -c
    手动将内存中的命令记录写入到文件中(~/.bash_history)
        history -aw
    note :
       当用户登入后所输入的命令会被记录在~/.bash_history 和内存中(history查询)

13.bash 命令执行的顺序

    1.绝对/相对路径
    2.执行别名alias
    3.bash的内建命令(builtin)
    4.$PATH按顺序执行

14.设置登入前后欢迎信息

复制代码
1.登入前
    /etc/issue  (tty1 ~ tty6)
    /etc/issue.net (telnet)
2.登入后(root+一般用户)
    /etc/motd (用户登入后会自动打印这个文件的内容)

[root@gaocun ~]# cat /etc/motd
欢迎回家~
[root@gaocun ~]# ssh gaocun
Last login: Fri May  6 07:20:44 2022 from 10.0.24.10
欢迎回家~
复制代码

15.资料流重定向

15.1 IO流标识

    > 覆盖模式 overwrite
    >> 追加模式 append

15.2 对信息的过滤(正确信息与错误信息分流)

复制代码
     标准输出(stdout) 命令返回的正确信息(默认值) 1> 1>>
     标准错误输出(stderr) 命令返回的错误信息 2> 2>>
        可以将错误信息输出到 /dev/null
     示例 :
        将错误信息输入到文件中
           cat  "str 3567"  2> list1
        将正确信息和错误信息输出到同一文件
           find /home -name .bashrc > list1 2>&1
        将正确信息和错误信息输出到不同同文件
           find /home -name .bashrc > list1 2>list2
复制代码

 15.3 将文件内容复制给变量

    read name < file #只将文件首行赋值给变量
    name=$(cat file) #将整个文件内容赋值给变量

15.4 将file1内容输出到file2

    cat file1 > file2  #覆盖模式
    cat file1 >> file2 #追加模式
    cat  > file < file1 #没用过

15.5 将键盘输入内容报错到指定文件,遇到指定字符则停止

复制代码
    cat > file << "var" #当键盘输出var时停止
[root@gaocun ~]# cat > demo << "stop"
> aaa
> aaa
> bbb
> stop
[root@gaocun ~]# cat demo
aaa
aaa
bbb
复制代码

15.6  << EOF 将脚本内的文本块重定向

使用方法
    cmd(常为交互式命令) <<EOF
        command1
        command2
    EOF
相当于
    echo "command1" | cmd(交互式命令)

16. bash 命令分隔符

;

17. bash 命令返回值

复制代码
$? : 0表示正确执行
      !0表示错误执行

[root@gaocun user]# echo 111
111
[root@gaocun user]# echo $?
0
[root@gaocun user]# gaocun
-bash: gaocun: command not found
[root@gaocun user]# echo $?
    
复制代码

18. bash 命令间的逻辑运算

    command1 && command2 当1为真时2才会执行
    command1 || command2 当1为假是2才会执行

 19. 管道命令符 |

    格式 command1 | command2 (命令1的stdout 作为 命令2的stdin)
    只能接受stdout不能接受stderr
    
[root@gaocun user]# echo "*.txt" | ls
user.txt

20. cut命令 bash中的split&substr

复制代码
    作用: 按照指定分割符切割字符串或文件,返回一个数组
    格式: cut -参数 file
    参数:
        -d --delimiter=分隔符(必须为单个字符,不能使用正则)
        -f  指定获取第几个切割元素,获取多个时用,分割,连续多个时用 x-y
        -c  获取指定区间的字符,获取多个字符时用,分割 连续多个时用 x-y
    示例:
        [root@gaocun ~]# echo "gao#cun#da#wang" | cut -d "#" -f 1,2
        gao#cun
        [root@gaocun ~]# echo "gao#cun#da#wang" | cut -d "#" -f 2-4
        cun#da#wang
        [root@gaocun ~]# echo "gao#cun#da#wang" | cut -c 1,5
        gc
        [root@gaocun ~]# echo "gao#cun#da#wang" | cut -c 1-5
        gao#c
    注意:
        -d 和 -c 不能一起使用
        cut -d "#" -f 1 => split(str,'#')[0]
        cut -c 1-5 => substr(str,1,5)
        cut适用当分割符为固定字符时,当分隔符不固定是建议使用awk  
复制代码

21. grep-bash中的like

    作用: 搜索包含指定字符串的行,并打印       
    格式: grep -参数  'str'  file(可同时查询多个文件空格分隔) 
    参数: -v 反向匹配 打印没有匹配到指定字符串的行
         -n 输出的同时打印行号
         -i 忽略大小写
         -c 只打印包含指定内容行的行数  

22. sort-排序

复制代码
    作用: 对文本文件排序,默认按行首字母正向排序
    格式: sort -参数 [file stdin] 
    参数: -f 忽略大小写
         -b 忽略行首空白字符
         -n 按照数字排序
         -r 逆向排序(倒叙)
         -u 去重,重复行仅出现一次
         -t 指定分割符(默认为tab)
         -k 已指定位置的元素排序(默认分割符为tab) 
复制代码

23. uniq-对重复行去重

   作用: 对重复行去重
   格式: uniq -参数 [file stdin]
   参数: -i 忽略大小写
        -c 对重复行计数
   注意: 建议先对行进行sort后再去重(只会对组内去重)

24. wc-打印文件行数、单词数、字符数

    作用: 打印文件行数、单词数、字符数
    格式: wc -参数 [file stdin] 
    参数: -l 仅输出文件的行数
         -w 仅输出文件的单词数(分割符为空白符)
         -c 仅输出文件的字符数
    注意: 不指定参数是默认输出 行数 单词数 字符数 文件名
    [root@gaocun ~]# wc user.txt 
    2139109  6417327 36498078 user.txt

25.tee-双向重定向

复制代码
    作用: 即将接收到的内容输出到屏幕和输出到文件
    格式: tee -参数 file 
              输入:stdin
              输出:stdout+file
    参数: -a 将stdin追加append到file中
    示例:
    [root@gaocun ~]# echo "我是大王" | tee demo
    我是大王
    [root@gaocun ~]# cat demo
    我是大王
    [root@gaocun ~]# 
复制代码

26. tr-bash中对字符的转换操作

复制代码
 作用: 从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。
   格式: tr [选项]... SET1 [SET2] [file|stdin]
   参数: -d, --delete 删除符合SET1 规则的字符,并不作替换
        -t, --truncate  符合set1规则的字符 用set2指定的字符替换,此参数为默认值
        -c, --complement  不符合set1规则的字符 用set2指定的字符替换,此参数为默认值(和-t相反)
        -s, --squeeze-repeats 符合set1规则的字符,如果连续就对连续字符去重
   示例:
       1.删除指定字符
            [root@gaocun ~]# echo "aaaa#bbbbb#cccc#aaaa"| tr -d 'abc'
            ###
       2.替换指定字符
            [root@gaocun ~]# echo "aaaa#bbbbb#cccc#aaaa"| tr -t 'abc' '12'
            1111#22222#cccc#1111
            符合a的用1替换 符合b的用2替换 符合c的set2没有值,所以不替换
       3.反向替换指定字符
            [root@gaocun ~]# echo "aaaa#bbbbb#cccc#aaaa"| tr -c 'a' '1'
            aaaa111111111111aaaa1[root@gaocun ~]# 
            将不符合a字符的都替换成1(连\n也替换掉了)
       4.缩减指定连续字符
            [root@gaocun ~]# echo "aaaa#bbbbb#cccc#aaaa"| tr -s 'a'
            a#bbbbb#cccc#a
复制代码

27.split-将一个大文件切分成多个小文件

复制代码
    作用: 将一个大文件切分成多个小文件
    格式: split [选项]... [输入 [前缀]]
    参数: -l 设置分割行数(默认5000行)
         -d 设置后缀为数字(默认为后缀为字母)
         -a 设置后缀为几位字符(默认为2位)
         (默认前缀为x)
    示例:
       split file  
            默认将文件以每5000行进行分割,后缀默认为两个字符, 前缀默认为x, 生成的文件名为xaa xab xac xad ....      
       split -l 100 file 
            设置文件以每 100 行进行分割, 后缀默认为两个字符, 前缀默认为x, 生成的文件名为xaa xab xac xad ....
       split -d -l 100 file 
            设置文件以每 100 行进行分割, 后缀默认为两位数字, 前缀默认为x,生成文件为x00 x01 x02 x03 ....
       split -d -l 100 file prefix 
            设置文件以每 100 行进行分割, 后缀默认为两位数字, 前缀设置为prefix, 生成文件为prefix00 prefix01 prefix02 pefix03 ....
       split -d -l 100 -a 3 file prefix  
            设置文件以每 100 行进行分割, 后缀为3位数字, 前缀为prefix,生成文件为prefix000 prefix001 prefix002 pefix003 ....
   
    [root@gaocun user]# split -d -l 2 demo user
    总用量 28
    -rw-r--r-- 1 root root 22 5月   7 06:55 demo
    -rw-r--r-- 1 root root  4 5月   7 06:56 user00
    -rw-r--r-- 1 root root  4 5月   7 06:56 user01
    -rw-r--r-- 1 root root  4 5月   7 06:56 user02
    -rw-r--r-- 1 root root  4 5月   7 06:56 user03
    -rw-r--r-- 1 root root  5 5月   7 06:56 user04
    -rw-r--r-- 1 root root  1 5月   7 06:56 user05
复制代码

28. cat-合并多个小文件

复制代码
格式: cat -参数 文件1 文件2 
   参数: -n 打印行号包括空白行
        -b 打印行号不包括空白行
        -E 显示行尾特殊字符$
        -T 显示[tab]用^I表示
        -v 显示特殊字符
        -A 显示所有特殊字符
   示例:
        合并小文件
        [root@gaocun user]# ll
        总用量 28
        -rw-r--r-- 1 root root 22 5月   7 06:55 demo
        -rw-r--r-- 1 root root  4 5月   7 06:56 user00
        -rw-r--r-- 1 root root  4 5月   7 06:56 user01
        -rw-r--r-- 1 root root  4 5月   7 06:56 user02
        -rw-r--r-- 1 root root  4 5月   7 06:56 user03
        -rw-r--r-- 1 root root  5 5月   7 06:56 user04
        -rw-r--r-- 1 root root  1 5月   7 06:56 user05

        [root@gaocun user]# cat user*
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        
复制代码

 29. xargs(从stdin获取参数)

复制代码
    作用: 将管道或标准输⼊(stdin)数据按照指定字符切割成数组
             遍历数组,将每个元素作为 command的输入 执行
    
    格式: stdin | xargs -参数 command(不指定命令时,默认为echo)
    参数: -d 指定分隔符,默认分隔符为\n 或 空白符 \r \t
         -n num 一次用的arguement的个数,默认是用所有元素
         -e flag 当元素值为flag时,停止执行
         -r 当元素值为空时,停止执行
         -p 每次执行前询问是否执行,y执行 n不执行
         -t 先打印执行命令,在执行命令
         -I var,将元素值赋值给变量var(当command参数位置不定或多次参数时使用)
    使用场景:
        有效命令无法通过 管道| 来传递参数,这是就需要通过 管道| + xargs 来传递参数    
        示例:
        [root@gaocun user]# echo demo | xargs ls -l  无效
        [root@gaocun user]# echo demo | xargs ls -l
        -rw-r--r-- 1 root root 22 5月   7 06:55 demo

        [root@gaocun user]# echo demo | find -name 错误
        find: 遗漏“-name”的参数
        
        [root@gaocun user]# echo demo | xargs find -name
        ./demo
       
用途1: 多⾏变单⾏
[root@gaocun user]# cat demo
1
2
3
4
5
6
7
8
9
10

[root@gaocun user]# cat demo | xargs
1 2 3 4 5 6 7 8 9 10

用途2: 单⾏变多⾏
echo "dawang#gaocun#2022#05" | xargs -d# -n1
[root@gaocun user]# echo "dawang#gaocun#2022#05" | xargs -d# -n1
dawang
gaocun
2022
05

用途3: 指定参数位置
[root@gaocun user]# echo "dawang#gaocun#2022#05" | xargs -d# -n1 -I x echo x
dawang
gaocun
2022
05
       
用途4: 删除指定目录及子目录下的所有.txt文件
[root@gaocun 3.txt]# find /root/user -name '*.txt'  -type f  -print |xargs -I x rm -rf x
复制代码

30. -(减号的使用) 

格式 从标准输入/标准输出中读取数据
还没有找到使用场景

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @   学而不思则罔!  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示