第十章_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. -(减号的使用)
格式 从标准输入/标准输出中读取数据
还没有找到使用场景
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界