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)三个文件描述符
#!/bin/bash
#输入输出重定向结合shell中生成新文件
#EOF只是一个分界符,当shell遇到<<时,它知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。
cat > /root/filename.sh <<EOF
echo "hello world"
EOF
变量
定义
Tip Shell 变量是弱类型,不需要声明类型
赋值
- 变量名=变量值:a=10
- 使用 let 为变量赋值:let a=10+20
- 将命令赋值给变量:l=ls
- 使用 $() 或
- 变量值有空格等特殊字符可以包含在” “或’ ‘ 中: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 文件锁