一、Shell脚本基础
1. 什么是shell脚本?及构成
-
就是将命令按顺序一一列出,最后自动执行
-
执行需要权限,也可以直接使用绝对路径
-
脚本其实不复杂,通用脚本环境改变后依然可以使用的脚本
构成:
- 脚本申明(解释器):第一行开头“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行。#!/bin/bash为默认的解释器还有其他类型的解释器,#!/bin/python #!/bin/expect
- 注释信息:以#开头的语句表示为注释信息
- 可执行语句:比如echo命令用于输出“ ”之间的字符串
2. shell脚本用途
-
将简单的命令组合完成复杂的工作,自动化执行命令,提高工作效率
-
减少手工命令的重复输入,一定程度上避免人为错误
-
将软件或应用的安装及配置实现标准化
-
用于实现日常性的,重复性的运维工作,如:文件打包压缩备份,监控系统运行状态并实现告警等
3. 脚本执行逻辑及执行方式
脚本执行逻辑:
-
顺序执行:程序按从上到下顺序执行
-
选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
-
循环执行:程序执行过程中需要重复执行多次某段语句
执行方式:
4. 脚本错误调试
-
命令错误
命令出错不会影响接下来的命令继续
hostname echo 'finsh'
-
语法错误
会影响接下来的命令继续
echo "hello world" hstname cat > /data/kgc.tx <<EOF 123 123 EOF echo "ni hao"
-
逻辑错误
只能自己去筛查
总结:脚本错误常见的有三种区别
-
语法错误,会导致后续的命令不继续执行,可以用bash -n 检查错误,提示的出错行数不一定是准确的
-
命令错误,默认后续的命令还会继续执行,用bash -n 无法检查出来 ,可以使用 bash -x 进行观察
-
逻辑错误:只能使用 bash -x 进行
5. 实操演示
二、 Shell脚本中的变量
1. 变量的作用
Shell 变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。通过使用变量,Shell 程序能够提供更加灵活的功能,适应性更强。
2. 常见Shell变量类型
自定义变量:由用户自己定义,修改和使用
环境变量:由系统维护,用于设置工作环境,使用env命令可以查看所有环境变量
只读变量:只可以读取不可以更改 ,相当于常量,用处较少
位置变量:通过命令行给脚本传递参数
预定义变量:Bash中内置的一类变量,不能修改 有些规定好的变量 放在那里让你使用
系统内置变量:PATH,UID,HOSTNAME,USER
3. 变量名要求
- 定义变量格式:变量名=变量值(shell中不用声明类型,所有类型均为字符串)
- 定义变量时,变量名要求:变量名区分大小写建议全部使用大写,不能使用系统内置变量。如$PATH是系统外部命令的存放路径等。
- 变量名不能以数字开头,且不支持短横线 -。
4. 主要指执行脚本时后面所跟着位置
$1-$9:脚本后1-9的位置
${10}:脚本后10以上的位置需要借助变量分隔符{},不然会将$1认为是一个位置变量然后输出再加上后面的数字。
⑤预定义变量:系统已经定义好的变量,只需要记住即可
$*:表示所有位置参数的内容看成一个整体返回
$@:表示输出脚本后的所有位置参数,且认为每个是独立的值
$0:表示当前执行的脚本或程序的名称 当前脚本的名字
$#:表示命令行中位置参数的总个数
$?:表示前一条命令执行后的返回状态,返回值为 0 表示上一条命令执行正确,返回任何非 0值均表示执行出现异常。使用方法echo $?
$!:后台任务最后一个id,使用方法echo $!
5. 变量作用范围
默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用。
可以通过内部命令export将指定的变量为全局变量,使用户定义的变量在所子shell环境中可以继续使用
方法:
-
格式1:export 变量名
-
格式2:export 变量名=变量值
可以使用pstree 查看shell的环境
输入bash进入子shell
ctrl+D组合exit 退出子shell
三、时间同步
1. 手动同步
date命令用来查看系统时间
date -s " 年-月-日 时:分:秒 " 手动修改系统时间
ntpdate +服务器地址或域名 立即和此服务器同步时间
例如: ntpdate ntp.aliyun.com 立即和阿里云时间服务器同步时间
2、搭建时间同步服务器
原理:
借助chrony时间同步软件,将有外网的服务器A作为时间服务器与外网服务器同步时间,如阿里云时间服务器(ntp.aliyun.com),然后其他没有外网的服务器B、C等与时间服务器A同步时间
搭建过程:
标签:脚本,shell,变量,命令,Shell,Linux,执行 From: https://www.cnblogs.com/daiwei-123/p/17092859.html