Shell

Shell

Shell 是命令解释器,用于解释用户对操作系统的操作
TipCentOS 7 默认使用的 Shell 是 bash

Shell 脚本

标准的 Shell 脚本要包含哪些元素

  • Sha-Bang
    #!/bin/bash 用于声明默认的Shell是bash
    Tip这是一种优雅的方式!当使用./filename.sh执行脚本时,告诉操作系统使用/bin/bash 执行脚本,这在不同操作系统执行时特别有用;而当使用 bash filename.sh 执行脚本时,#被认为是注释
  • 命令
  • “#”号开头的注释
  • chmod u+rx filename 可执行权限
  • 执行命令的方式 | | 子进程 | 是否需要执行权限 | 是否影响当前环境 | | | —- | —- | —- | —- | —- | | bash ./filename.sh. | √ | × | × | 当前终端下生成 bash 子进程,并在该子进程下执行命令,执行完后回到当前进程 | | ./filename.sh | √ | √ | × | 使用Sha-Bang声明的命令解释器执行命令 | | source ./filename.sh | | | √ | 使用当前进程 | | . filename.sh | | | √ | |

管道

管道符 是”|” ,将一个命令的结果传递给后面的命令,并会给两个命令创建子进程。

重定向

Tip输入重定向符号 “ <”
输出重定向符号

  • “>” :覆盖
  • “>>”:追加
  • “2>”:错误
  • “&>”:全部

Tip一个进程默认会打开标准输入(0)、标准输出(1)、错误输出(2)三个文件描述符

  1. #!/bin/bash
  2. #输入输出重定向结合shell中生成新文件
  3. #EOF只是一个分界符,当shell遇到<<时,它知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。
  4. cat > /root/filename.sh <<EOF
  5. echo "hello world"
  6. EOF

变量

定义
Tip Shell 变量是弱类型,不需要声明类型

赋值

  • 变量名=变量值:a=10
  • 使用 let 为变量赋值:let a=10+20
  • 将命令赋值给变量:l=ls
  • 使用 $() 或 将命令结果赋值给变量:letc=$(ls -l /etc)
  • 变量值有空格等特殊字符可以包含在” “或’ ‘ 中:cmd1=”hello I’m qingyi” cmd2=’ hello “bash”‘

Tip 赋值时=左边或右边都不能出现空格

变量的引用
${变量名}

变量的查看
echo ${变量名}
Tip ${变量名} 大部分情况可以省略为 $变量名

作用范围
Tip 变量的默认作用范围只在当前终端或 Shell 中,对父进程或子进程都不生效

系统变量

环境变量配置文件**
文件
• /etc/profile
• /etc/bashrc
• ~/.bashrc
• ~/.bash_profile
目录
• /etc/profile.d/

特殊符号
• 引号

• 括号

• 运算和逻辑符号

• 转义符号

• 其他符号

信号

软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。

捕获信号

  • kill 默认发送15号信号给应用程序
  • ctrl + c 发送2号信号给应用程序
  • 9号信号不可阻塞

计划任务

一次性计划任务
at TIME
进入任务编辑环境,TIME 为指定时间,按Ctrl + D 提交任务;atq 查看计划任务;atrm 任务号 删除指定任务

周期性计划任务
**crontab**

  • crontab -e 设置项目分为六栏,“分、时、日、月、周、指令”为其设置依据;
  • crontab -l 查看contab 定时任务

延时计划任务
如果计算机不能按照预期时间运行
anacrontab
flock 文件锁