目录
1.Shell脚本
1.1 Shell脚本概述
(1)Shell脚本概念
-
将要执行的命令按顺序保存到一个文本文件
-
给该文件可执行权限
-
可结合各种Shell控制语句以完成更复杂的操作
(2)shell脚本应用场景
-
重复性操作
-
交互性任务
-
批量事务处理
-
服务运行状态监控
-
定时任务执行
1.2 Shell的作用
Shell(壳程序)是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
查看系统中的shell类型;
1.3 编写Shell脚本
(1)编写脚本代码
使用vim 编辑器进行编写
vim tan.txt
(2)执行shell脚本三种方法
1.bash/sh 指定脚本文件运行(sh为bash软连接)可无执行权限
2.使用绝对路径或相对路径指定脚本文件运行,需要有执行权限
以上两种方式执行脚本都是在子shell环境中执行脚本
3.source/. 指定脚本文件运行,可无执行权限
会在当前shell环境中执行脚本(改变目录等等)
2.重定向与管道操作
2.1 交互式硬件设备
2.2 重定向操作
重定向输入:<,从指定文件读取数据;
重定向输出:>,将输出结果保存到指定文件,会覆盖文件中原有内容;
>>,将输出结果追加到指定文件的尾部,可以实现合并两个文件的效果;
标准错误输出:2>,将错误信息保存到指定的文件中,会覆盖文件中原有的内容;
2>>,将错误信息追加保存到指定的文件中,不会覆盖文件中原有的内容;
混合输出:&>将代码正确执行的内容标准输出到指定文件中,或者将错误信息保存到指定文件;
&>>将代码正确执行的内容标准输出到指定文件末尾,或者将错误信息保存到指定文件末尾;
混合输出的补充知识:(2>&1:将标准错误输出重定向到标准输出)
echo 123 > tan.txt 2>&1 #等同于echo 123 &> tan.txt
###本来echo 123为1-->屏幕(1指向屏幕)
###执行>tan.txt后,1-->tan.txt〔1指向tan.txt)
###执行2>&1后,2-->1 (2指向1,而1指向tan.txt,因此2也指向了tan.txt)
2.3 管道符号操作“|”
3.Shell脚本变量
3.1 自定义变量
定义变量的两种方法;
第一种方法
变量名=变量值;变量名可用用大小写字母或数字开头其中数字开头必须加_
如何查看多个变量值?
第二种方法
read -p “提示内容” 变量名
3.2 如何调换两个变量的值
3.3 赋值时使用引号
反撇号:用于提取命令执行后的结果;作用效果等于$()
3.4变量的作用范围
使用export设置当前会话中为全局变量,使得任何shell环境中都能生效
如何使在所有用户在所有shell中有效?
方法1:修改etc/bashrc(每次切换shell环境都会执行该文件里的配置)文件,添加变量命令
方法2:修改/etc/profile文件中定义变量
使用source /etc/profile 立即生效 或 重新登录系统自动生效
3.5 整数变量的运算
除expr以外的整数运算
1.echo $(expr 整数1/变量1 运算符 整数2/变量2)+ - \* / %
2.echo $[整数1/变量1 运算符 整数2/变量2] + - * / %
3.echo $((整数1/变量1 运算符 整数2/变量1 )) + - * / %
4.let 变量
3.6 浮点数变量的运算
echo 'n.n+m.m' | bc
awk 'BEGIN{print n.n+m.m}'
3.6 特殊的Shell变量
常见的环境变量
PWD
PATH
USER
SHELL
HOME
LANG
env查询当前系统所有环境变量
3.7 只读变量
只读变量不允许修改和删除,消除只读变量的方法只能重启
3.8 位置变量
如何将${10}与${11}相加
3.9 预定义变量
$0 代表脚本本身
$# 代表脚本后面跟的位置参数的数量
$? 代表的是上一条Linux命令执行的返回状态码(0~255),0表示上一条命令执行正确,非0值则表示上一条命令执行异常
$* 默认代表脚本后面跟的所有参数,加上双引号后 "$*" 会把所有参数看做一个整体
$@ 默认代表脚本后面跟的所有参数,加上双引号后 "$@" 还是会把每个参数看做
$#:代表脚本后面跟的位置参数的数量
$0:代表脚本本身
$?:判断命令执行是否成功0为成功,只返回上一条命令的执行结果
$*:默认代表脚本后面跟的所有参数,加上双引号后 "$*" 会把所有参数看做一个整体
$@:默认代表脚本后面跟的所有参数,加上双引号后 "$@" 还是会把每个参数看做
不加双引号时
加双引号时
3.10 date用法
通过使用date --help 可用查询到date的一些用法