目录
2.绝对路径 和 相对路径(shell脚本)(需要执行权限)
Linux中有哪些Shell?
可以查看 /etc/shells这个文件,里面就是Linux所包含的Shell
- sh:UNIX最初使用的 shell,已经被bash所替换。
- bash:基准于GNU的框架下发展出的Shell,是 sh 的扩展。
- csh:语法有点类似于c语言的Shell。
- tcsh:整合了csh,提供更多的功能。
- nologin:奇怪的shell,这个shell可以让用户无法登录主机。
- 登录后默认使用的Shell程序,一般为/bin/bash
Shell脚本的概述
概念
- 将要执行的命令按顺序保存到一个文本文件
- 给该文件可执行权限
- 可结合各种Shell控制语句以完成更复杂的操作
应用场景
- 重复性操作
- 交互性任务
- 批量事务处理
- 服务运行状态监控
- 定时任务执行
作用
- 自动化运维
- 批量化重复操作可以编写脚本结合计划任务自动周期运行
- 减轻管理员工作量
- 提高处理文本文件的速度
- 避免配置出错
Shell脚本的使用
编程语言类型
- 编译型:C , C++ , JAVA , GO 代码文件需要先编译后,程序才能执行
- 解释型:SHELL , PYTHON 代码是边解释边运行
编写结构
第一行 申明解释器
#!/bin/bash 或 #!/bin/python
第二行 编写注释信息
要以 # 开头表示注释,被注释的语句在脚本运行时是不会被执行的
第三行 编写执行语句
按照顺序编写要执行的命令语句
示例
执行Shell脚本
1.bash 或 sh shell脚本 (可无执行权限)
在子shell环境中执行脚本
例:
bash jlh.sh #执行shell脚本
sh jlh.sh #执行shell脚本
2.绝对路径 和 相对路径(shell脚本)(需要执行权限)
在子shell环境中执行脚本
例:
chmod +x jlh.sh #添加执行权限
绝对路径(jlh.sh) #执行shell脚本
相对路径(jlh.sh) #执行shell脚本
3.source 或 . shell脚本(可无执行权限)
会在当前shll脚本环境中执行脚本
例:
source jlh.sh #执行shell脚本
. jlh.sh #执行shell脚本
重定向符号
- < 重定向输入,从文件读取数据
- > 重定向输出,将正常输出的数据信息保存到文件,并覆盖原文件内容
- >> 重定向追加,将正常输出的数据信息追加保存到文件末尾
- 2> 重定向错误输出,将错误输出的数据信息保存到文件,并覆盖原文件内容
- 2>> 重定向错误追加,将错误输出的数据信息追加保存到文件末尾
- &> >& 混合输出,将正常和错误输出的数据信息都保存到文件,并覆盖原文件内容
- &>> 混合追加,将正常和错误输出的数据信息都追加保存到文件末尾
- 命令 > 文件 2>&1 效果等效于混合输出
例:
ls -lh 标准输出 到屏幕 1 --> 屏幕
ls -lh > test.txt 重定向输出 到 test.txt 1 --> test.txt
2>&1 错误输出 重定向到 标准输出 2 --> 1
引号的作用
- "$XXX" 会把$看作为引用XXX变量值的特殊符号
- '$XXX' 会把$看作为一个普通字符,不会引用变量的值
- `...` $(...) 提取里面的命令执行后的结果
数值运算
整数运算
- echo $(expr 整数1 运算符 整数2) $(expr $变量1 运算符 $变量2) + - \* / %
- echo $[整数1 运算符 整数2] $[变量1 运算符 变量2] + - * / %
- echo $((整数1 运算符 整数2)) $((变量1 运算符 变量2)) + - * / %
- let a=10+5
- let a++ #相当于 a=$[a+1]
- let a-- #相当于 a=$[a-1]
- let a+=2 #相当于 a=$[a+2]
浮点数运算
- echo '4.5+2.1' | bc
- awk 'BEGIN{print 4.5+2.1}'
变量
定义变量
变量名=变量值 #变量名只能用 _ A-Z a-z 开头
read -p "提示内容" 变量名 #从键盘输入中获取变量值
变量的作用范围
默认情况下自定义的变量只能在当前shell环境中有效
让自定义的变量在所有shell环境中有效的方法:
- 在 /etc/profile 文件中定义 export 变量名=变量值 source /etc/profile 立即生效 或 重新登录系统自动生效
- 在 /etc/bashrc 文件中定义 变量名=变量值 切换 shell 环境自动生效
环境变量
env #查看当前shell环境中所有可用的环境变量
/etc/profile ~/.base_profile
export PATH USER PWD HOME LANG HISTSIZE
只读变量
- readonly 变量名=变量值 #只读变量不允许被修改变量值和删除变量
位置变量
- ./test.sh one two three four .... ten
- $0 $1 $2 $3 $4 ${10}
预定义变量
- $0 代表脚本本身
- $# 代表脚本后面跟的位置参数的数量
- $? 代表的是上一条Linux命令执行的返回状态码(0~255),0表示上一条命令执行正确,非0值则表示上一条命令执行异常
- $* 默认代表脚本后面跟的所有参数,加上双引号后 "$*" 会把所有参数看做一个整体
- $@ 默认代表脚本后面跟的所有参数,加上双引号后 "$@" 还是会把每个参数看做
查看日期
- date +"%Y%m%d" #当天日期
- date -d "1 day" +"%Y%m%d" #昨天日期
- date +"%Y%m01" #当月第一天
- date -d "1 month" +"%Y%m01" #下个月第一天
- date -d "$(date -d "1 month" +"%Y%m01") -1 day" +"%Y%m%d" #当月最后一天