1,顺序执行:程序按从上到下顺序执行
2,选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
3,循环执行:程序执行过程中需要重复执行多次某段语句(已知次数 已知条件 死循环)
脚本简单理解 就是命令的集合
将要执行的命令按顺序保存到一个文本文件,给该文件可执行权限,可结合各种Shell控制语句以完成更复杂的操作。
重复性操作
交互性任务
批量事务处理
服务运行状态监控
定时任务执行
1,解释器 (脚本是用什么语言写的) 可以不写
2, 注释 (解释语句的含义) 可以不写
3, 执行语句
当以路径执行,权限不够
加上执行权限,再此以路径执行
使用前两种方式执行脚本会开启子 bash 去执行
使用source 和点会影响当前的bash环境
所以推荐用bash 解释器执行
做一个软连接
命令出错 不会影响下面命令的执行
想要猫,得到狗
不在当前目录下加绝对路径
重定向的意思就是,不输出到默认设备上,输出到你指定的位置(文件 其他输出设备)
类型 | 设备文件 | 文件描述编号 |
---|---|---|
标准输入 | /dev/stdin | 0 |
标准输出 | /dev/stdout | 1 |
标准错误输出 | /dev/stderr | 2 |
重定向类型 来源:
例题:以下不能将正确和错误一起显示出来的是
[root@centos7 ~]#ls /data /xxx 1> /data/all.log 2>&1
[root@centos7 ~]#ls /data /xxx 2> /data/all.log 1>&2
[root@centos7 ~]#ls /data /xxx &> /data/all.log
[root@centos7 ~]#ls /data /xxx >& /data/all.log[root@centos7 ~]#ls /data /xxx 2>&1 1> /data/all.log
1代表 正确输入
2代表 错误输入
& 代表混合
[root@centos7 ~]#ls /data /xxx 2>&1 1> /data/all.log 不可以
Here Document 概述 使用 I/O 重定向的方式将命令列表提供给交互式程序或命令,比如 ftp、cat 或 read 命令。 HereDocument是标准输入的一种替代品, 可以帮助脚本开发人员不必使用临时文件来构建输入信息, 而是直接就地生产出一个文件并用作命令的标准输入。
自定义变量:由用户自己定义,修改和使用
预定义变量:Bash中内置的一类变量 shell 不能修改 规定好的变量 放在那里让你使用
环境变量:由系统维护,用于设置工作环境 当前目录 当前主机名啊 $PATH
只读变量:只可以读取不可以更改 只能不能修改 常量
位置变量:通过命令行给脚本传递参数
区分大小写
不能使程序中的保留字和内置变量:如:if, for,hostname 命令 a=
只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反
不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH
大驼峰 StudentFirstName
小驼峰 studentFirstName
下划线 student_name
取消变量:
unset 变量名
如: 同时ping 192.168.91网段的 所有ip
变量在一定程度可以当做别名使用
交互式的输入变量值,然后 使用变量
bash:linux 桌面环境
bash作用: 输入命令bash 会进入当前bash的子bash 就是进入另一个桌面环境,当做出可能影响的操作时,直接exit 退出当前子bash 回到父bash
当你切换用户时 su - 和 su 之后的bash 都不是之前的子bash 都是新的bash
su - 和 su 区别:
su 不彻底 新用户 会继承老用户的 环境变量
一旦你登录 bash 环境 会读取以下四个文件 进行个性化配置
登录时进行操作,任何可以执行的命令都可以写进去
只对当前用户生效:
~/.bashrc ~/.bash_profile
对系统里的所有人生效
/etc/profile /etc/profile.d/*.sh
自定义的变量只能在当前bash 环境生效
想这个变量在所有的子(孙)bash 环境生效,加export(局部变量 变全局变量 )
运算符:
加法 +
减法 -
乘法 \ * (* 是乘法 \ 转义,指表示原来的意思)
除法 /
取余 (取模)%
% 的意思,是除了之后取余数,如 6 % 3 值为0
100 % 33 值为1
随机一个数(范围0到32767) % 33 值为0到32(不可能是33 33可以被整除)
expr只能进行整数的运算
格式: expr 变量1 运算符 变量2 [运算符 变量3]
bc 能用小数
$RANDOM 这个变量取值范围:0-32767
(会在这个范围随机取数)
要求:取 1 到33随机数
RANDOM%33 可以得到0 到32的任意数值,因为0到32767 除以 33
余数只可能是0到 32
可以通过sz命令 把脚本放到别的计算机去执行
由系统提前创建,用来设置用户的工作环境
可以使用env查看环境变量
$USER 表示用户名称
$HOME 表示用户的宿主目录
$LANG 表示语言和字符集
$PWD 表示当前所在工作目录
$PATH 表示可执行用户程序的默认路径
可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量
一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程
一般只在系统配置文件中使用,在脚本中较少使用
配置文件位置在
/etc/profile如果修改此文件会作用于所有用户
~/.bash_profile 用户独立的配置文件,修改这个文件只作用于当前用户
变量值不允许修改(重新赋值)的情况
无法使用 unset删除
最快方法重启
位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示
就是字面意思, 根据脚本里的位置顺序,显示bash 脚本后对应的值
$*:表示所有位置参数的内容看成一个整体返回 返回所有
$@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有
$?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常
$#:表示命令行中位置参数的总个数
$0:表示当前执行的脚本或程序的名称 当前脚本的名字
$$:当前bash的进程id
$!: 后台任务最后一个id
bash 帮你定义好了 拿来用就可以了,你不需要知道为什么,记住
$* 把a到z 看成一个整体
$@ a 到 z 各自是一个整体
echo "$*" 将所有项当成一个值
echo "$@" 独立个体
echo "$#" 后面参数的个数
脚本3 是打印第一个位置参数
脚本1 和脚本2 的结果 都交给脚本3, 输出$1
两者结果不同
只能是上一个命令 0是正确 非0 为不正确
把脚本做软连接 会显示软连接的名字