程序 程序:算法+数据结构 数据:是程序的核心 数据结构:数据在计算机中的类型和组织方式 算法:处理数据的方式 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell程序:提供了编程能力,解释执行
编程逻辑处理方式: 顺序执行 循环执行 选择执行 shell编程:过程式、解释执行 编程语言的基本结构: 各种系统命令的组合 数据存储:变量、数组 shell脚本: 包含一些命令或声明,并符合一定格式的文本文件 格式要求:首行shebang机制(使用的语言)
#!/bin/bash #!/usr/bin/python #!/usr/bin/perlshell脚本的用途有: 1.自动化常用命令 2.执行系统管理和故障排除 3.创建简单的应用程序 4.文本或文件
第一步:使用文本编辑器来创建文本文件 第一行必须包括shell声明序列:#! 示例:#!/bin/bash 添加注释 注释以#开头 第二步:运行脚本 给予执行权限,在命令行上指定脚本的绝对或相对路径 直接运行解释器,将脚本作为解释器程序的参数运行
脚本代码开头约定
1、第一行一般为调用使用的语言 2、程序名,避免更改文件名为无法找到正确的文件 3、版本号 4、更改后的时间 5、作者相关信息 6、该程序的作用,及注意事项 7、最后是各版本的更新简要说明例如
#!/bin/bash # ------------------------------------------ # Filename: hello.sh # Revision: 1.1 # Date: 2020/10/20 # Author: qcq # Email: qcq@gmail.com # Website: www.qcq.com # Description: This is the first script # Copyright: 2020 qcq # License: GPL # ------------------------------------------ echo “hello world”1.检测脚本中的语法错误 bash -n /path/to/some_script 2.调试执行___用于跟踪 bash -x /path/to/some_script
注意:if语句可嵌套 单分支
if 判断条件;then 条件为真的分支代码 fi双分支
if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi多分支
if 判断条件1; then 条件1为真的分支代码 elif 判断条件2; then 条件2为真的分支代码 elif 判断条件3; then 条件3为真的分支代码 else 以上条件都为假的分支代码 fi逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句
例如: 根据命令的退出状态来执行命令
if ping -c1 -W2 station1 &> /dev/null; then echo 'Station1 is UP' elif grep "station1" ~/maintenance.txt &> /dev/null; then echo 'Station1 is undergoing maintenance' else echo 'Station1 is unexpectedly DOWN!' exit 1 fi实现一个脚本判断年龄5-20 好好学习 20-50好好工作 60-100享受生活 ^[0-9]+$ 这个表示数字(扩展正则表达式)
case支持glob风格的通配符:
*: 任意长度任意字符 ?: 任意单个字符 []:指定范围内的任意单个字符 a|b: a或b格式
case 变量引用 in PAT1) 分支1 ;; PAT2) 分支2 ;; *) 默认分支 ;; esac
反斜线(\)会使随后的字符按原意解释 echo Your cost: $5.00 Your cost: $5.00 加引号来防止扩展
小括号优先级最高–用于分组
单引号(’’)防止所有扩展 •双引号(”“)也可防止扩展,但是以下情况例外: $(美元符号) 变量扩展 ` ` (反引号) 命令替换 \(反斜线) 禁止单个字符扩展 !(叹号) 历史命令替换set 命令
$- 变量 h:hashall,打开这个选项后,Shell 会将命令所在的路径hash下来,避免每次 都要查询。通过set +h将h选项关闭 i:interactive-comments,包含这个选项说明当前的 shell 是一个交互式的 shell。所谓的交互式shell,在脚本中,i选项是关闭的。 m:monitor,打开监控模式,就可以通过Job control来控制进程的停止、继 续,后台或者前台执行等。 B:braceexpand,大括号扩展 H:history,H选项打开,可以展开历史列表中的命令,可以通过!感叹号来完 成,例如“!!”返回上最近的一个历史命令,“!n”返回第 n 个历史命令set 命令 -u 当没有有变量不存在----报错—不会执行 等同set –o nounset -e 如果一个命令错误就会直接退出 等同set –o errexit
set -u建议使用 当DIR不存在时 那么就会把你/*.txt 文件都删除
小括号 退出的是shell(子shell) 花括号 当前进程退出{ ; }但最后必须有一个分好
建议: Set -u 和set -e(编写脚本时)使用 在最前面使用 shell脚本后缀一般为.sh
2.用路径执行必须加 ------执行权限x
或者直接 用绝对路径(就可以执行) 麻烦 也可以 用相对路经(相对于上一级目录) 麻烦 3.更改path变量(增加shell文件上级目录) 在/etc/profile.d/env.sh 然后重新登录( 这样就可执行脚本脚本)
4.可以用管道将他的内容传给bash