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 环境生效
想这个变量在所有的子(孙)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? 为不正确
把脚本做软连接? ?会显示软连接的名字