Shell 编程-Linux Bash看这一篇就够了

今天给伙伴们分享一下Shell 编程-Linux Bash,希望看了有所收获。

我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!

如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。

一、Bash 的初始化

1、Bash 环境变量文件

1、/etc/profile
  • 全局(公有)配置,不管是哪个用户,登录时都会读取该文件,只有登录的时候读一次,后续不在关注,改变文件需要立即生效,执行source /etc/profile 。
2、/ect/bashrc
  • Ubuntu 没有此文件,与之对应的是 /ect/bash.bashrc
  • 它也是全局(公有)的
  • bash 执行时,不管是何种方式,都会读取此文件。
3、~/.profile
  • 若 bash 是以 login 方式执行时,读取 ~/.bash_profile,若它不存在,则读取 /.bash_login,若前两者不存在,读取/.profile。

  • 图形模式登录时,此文件将被读取,即使存在 ~/.bash_profile 和 ~/.bash_login。

4、~/.bash_login
  • 若 bash 是以 login 方式执行时,读取 ~/.bash_profile,若它不存在,则读取 ~/.bash_login,若前两者不存在,读取 ~/.profile。
5、~/.bash_profile
  • Unbutu 默认没有此文件,可新建。

  • 只有 bash 是以 login 形式执行时,才会读取此文件。通常该配置文件还会配置成去读取 ~/.bashrc。

6、~/.bashrc
  • 当 bash 是以 non-login 形式执行时,读取此文件。若是以 login 形式执行,则不会读取此文件。
7、~/.bash_logout
  • 注销时,且是 longin 形式,此文件才会读取。在文本模式注销时,此文件会被读取,图形模式注销时,此文件不会被读取。

2、Bash 环境变量加载

  • 图形模式登录时,顺序读取:/etc/profile 和 ~/.profile

  • 图形模式登录后,打开终端时,顺序读取:/etc/bash.bashrc 和 ~/.bashrc

  • 文本模式登录时,顺序读取:/etc/bash.bashrc,/etc/profile 和 ~/.bash_profile

  • 从其它用户 su 到该用户,则分两种情况:

    • 如果带 -l 参数(或-参数,–login 参数),如:su -l username,则 bash 是 login 的,它将顺序读取以下配置文件:/etc/bash.bashrc,/etc/profile 和~/.bash_profile。
    • 如果没有带 -l 参数,则 bash 是 non-login 的,它将顺序读取:/etc/bash.bashrc 和 ~/.bashrc
  • 注销时,或退出 su 登录的用户,如果是 longin 方式,那么 bash 会读取:~/.bash_logout

    • 执行自定义的 Shell 文件时,若使用 bash -l a.sh 的方式,则 bash 会读取行:/etc/profile 和 ~/.bash_profile,若使用其它方式,如:bash a.sh,./a.sh,sh a.sh(这个不属于bash Shell),则不会读取上面的任何文件。
    • 上面的例子凡是读取到 ~/.bash_profile 的,若该文件不存在,则读取 ~/.bash_login,若前两者不存在,读取 ~/.profile。

二、Bash 特性

1、命令和文件自动补齐

  • 很多命令都会提供一个 bash-complete 的脚本,在执行该命令时,敲 tab 可以自动补全参数,会极大提高生产效率。

  • linux命令自动补全需要安装 bash-completion

[[email protected] ~]# yum install bash-completion
  • 注意: 重启系统后可正常 tab 补齐

  • 默认情况下,Bash 为 Linux 用户提供了下列标准补全功能。

    • 变量补全
    • 用户名补全
    • 主机名补全
    • 路径补全
    • 文件名补全

2、命令历史记忆功能

  • Bash 有自动记录命令的功能,自动记录到.bash_history隐藏文件中。还可以在下次需要是直接调用历史记录中的命令

  • centos 可以通过/etc/profile中的文件来定义一些参数、

  • 在bash中,使用history 命令来查看和操作之前的命令,以此来提高工作效率。

  • history是bash的内部命令,所以可以使用 help history命令调出history命令的帮助文档。

  • 调用命令的方法:

# 查看之前使用的所有命令
[[email protected] ~]# history

# 显示最近的n个命令
[[email protected] ~]# history n

# 删除相应的第n个命令
[[email protected] ~]# history -d n

# 指定执行命令历史中的第n条语句
[[email protected] ~]# !n

# 指定执行命令历史中倒数第n条语句
[[email protected] ~]# !-n

# 执行命令历史中最后一条语句
[[email protected] ~]# !!

# 执行命令历史中最近一条以[String]开头的语句
[[email protected] ~]# ![String]

# 引用上一个命令中的最后一个参数
[[email protected] ~]# !$
# COMMAND + Esc键 + .  输入COMMAND之后,按下Esc键,松开后再按 . 则可以自动输入最近一条语句使用的参数
# COMMAND + Alt + .  输入COMMAND之后,同时按下Alt和. 键,也可以自动输入最近一条语句使用的参数
 
# 将命令历史写入命令历史的文件中
[[email protected] ~]# history -w

# 回显 echo 之后的语句,而使用 echo $FILENAME 命令可以查看该 file 所在的路径
[[email protected] ~]# echo $HISTFILE

# 查看命令历史的内容
[[email protected] ~]# cat .bash_history

# 删除所有的命令历史记录
[[email protected] ~]# history -c

3、 别名功能

alias命令,别名的好处是可以把本来很长的指令简化缩写,来提高工作效率。

[[email protected] ~]# alias        #查看系统当前所有的别名
[[email protected] ~]# alias  h5=‘head -5’ #定义新的别名。这时候输入h5就等于输入’head-5‘
[[email protected] ~]# unalias  h5  #取消别名定义

如果想要文件永久生效,只需将上述别名命令写到对应用户或者系统 bashrc 文件中

如果想用真实命令可以在命令前面添加反斜杠 ,使别名失效

[[email protected] ~]# \cp -rf /etc/hosts 

4、快捷键

快捷键 作用
ctrl+A 把光标移动到命令行开头。如果我们输入的命令过长,想要把光标移动到命令行开头时使用。
ctrl+E 把光标移动到命令行结尾。
ctrl+C 强制终止当前的命令。
ctrl+L 清屏,相当于clear命令。
ctrl+U 删除或剪切光标之前的命令。我输入了一行很长的命令,不用使用退格键一个一个字符的删除,使用这个快捷键会更加方便
ctrl+K 删除或剪切光标之后的内容。
ctrl+Y 粘贴ctrl+U或ctul+K剪切的内容。
ctrl+R 在历史命令中搜索,按下ctrl+R之后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索。
ctrl+D 退出当前终端。 exit
ctrl+Z 暂停,并放入后台。这个快捷键牵扯工作管理的内容,我们在系统管理章节详细介绍。
ctrl+S 暂停屏幕输出。
ctrl+Q 恢复屏幕输出。

5、前后台作业控制

Linux bash Shell单一终端界面下,经常需要管理或同时完成多个作业,如一边执行编译,一边实现数据备份,以及执行SQL查询等其他的任务。所有的上述的这些工作可以在一个 bash 内实现,在同一个终端窗口完成。

1、前后台作业的定义
  • 前后台作业实际上对应的也就是前后台进程,因此也就有对应的 pid。在这里统称为作业。

  • 无论是前台作业还是后台作业,两者都来自当前的Shell,是当前Shell的子程序。

  • 前台作业:可以由用户参与交互及控制的作业我们称之为前台作业。

  • 后台作业:在内存可以自运行的作业,用户无法参与交互以及使用[ctrl]+c来终止,只能通过bg或fg来调用该作业。

2、几个常用的作业命令
  • command & 直接让作业进入后台运行

  • [ctrl]+z 将当前作业切换到后台

  • jobs 查看后台作业状态

  • fg %n 让后台运行的作业n切换到前台来

  • bg %n 让指定的作业n在后台运行

  • kill %n 移除指定的作业n

    • “n” 为jobs命令查看到的job编号,不是进程id。
    • 每一个job会有一个对应的job编号,编号在当前的终端从1开始分配。
    • job 编号的使用样式为[n],后面可能会跟有 “+” 号或者 “-” 号,或者什么也不跟。
    • “+” 号表示最近的一个job,
    • “-” 号表示倒数第二个被执行的Job。
    • 注,“+” 号与 “-” 号会随着作业的完成或添加而动态发生变化。
  • 通过jobs方式来管理作业,当前终端的作业在其他终端不可见。

3、演示后台作业命令
# 直接将作业放入到后台(附加 & 符号)  
[[email protected] ~]# sleep 600  &  
[1] 12500   
  
[[email protected] ~]#              # 此时可进行其它操作,作业一旦完成,会弹出如下的提示    
[1]+  Done                    

猜你喜欢

转载自blog.csdn.net/mohuanfenghuang/article/details/142893781