一. 编程基础
程序
程序:算法+数据结构
数据:是程序的核心
数据结构:数据在计算机中的类型和组织方式
算法:处理数据的方式
程序编程风格:
过程式:以指令为中心,数据服务于指令
对象式:以数据为中心,指令服务于数据
shell程序:提供了编程能力,解释执行
编程逻辑处理方式:
顺序执行
循环执行
选择执行
shell编程:过程式、解释执行
编程语言的基本结构:
各种系统命令的组合
数据存储:变量、数组
shell脚本:
包含一些命令或声明,并符合一定格式的文本文件
格式要求:首行shebang机制(使用的语言)
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
shell脚本的用途有:
1.自动化常用命令
2.执行系统管理和故障排除
3.创建简单的应用程序
4.文本或文件
二. 创建shell脚本
第一步:使用文本编辑器来创建文本文件
第一行必须包括shell声明序列:#!
示例:#!/bin/bash
添加注释
注释以#开头
第二步:运行脚本
给予执行权限,在命令行上指定脚本的绝对或相对路径
直接运行解释器,将脚本作为解释器程序的参数运行
1. 脚本基本格式
脚本代码开头约定
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”
2. 脚本调试
1.检测脚本中的语法错误
bash -n /path/to/some_script
2.调试执行___用于跟踪
bash -x /path/to/some_script
3. 条件判断if
注意: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]+$
这个表示数字(扩展正则表达式)
4. 条件判断case
case支持glob风格的通配符:
*: 任意长度任意字符
?: 任意单个字符
[]:指定范围内的任意单个字符
a|b: a或b
格式
case 变量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
*)
默认分支
;;
esac
三 防止扩展
反斜线(\)会使随后的字符按原意解释
echo Your cost: $5.00
Your cost: $5.00
加引号来防止扩展
小括号优先级最高–用于分组
单引号(’’)防止所有扩展
•双引号(”“)也可防止扩展,但是以下情况例外:
$(美元符号) 变量扩展
` ` (反引号) 命令替换
\(反斜线) 禁止单个字符扩展
!(叹号) 历史命令替换
$- 变量
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 命令
set 变量 值
直接赋值
set ip 192.168.8.100
-u 当没有有变量不存在----报错—不会执行
等同set –o nounset
-e 如果一个命令错误就会直接退出
等同set –o errexit
set -u建议使用
当DIR不存在时 那么就会把你/*.txt 文件都删除
六. 重点
小括号 退出的是shell(子shell)
花括号 当前进程退出{ ; }但最后必须有一个分好
建议: Set -u 和set -e(编写脚本时)使用
在最前面使用
shell脚本后缀一般为.sh
执行shell的方法
- 执行时用
bash 文件名
(这种方式很少用)
所以得找一个文件—把这个路径扔到文件里
改path变量(给他加上路径)
2.用路径执行必须加 ------执行权限x
或者直接 用绝对路径(就可以执行) 麻烦
也可以 用相对路经(相对于上一级目录) 麻烦
3.更改path变量(增加shell文件上级目录)
在/etc/profile.d/env.sh
然后重新登录( 这样就可执行脚本脚本)
4.可以用管道将他的内容传给bash