问题描述
shell编程规范与变量
shell编程规范与变量
shell脚本概述
什么是shell:
shell 是操作系统的最外层。shell 合并编程语言以控制进程和文件,以及启动和控制其它程序。shell 通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出来管理您与操作系统之间的交互。
shell的作用
- 命令解释器,“翻译官”:
介于系统内核与用户之间,负责解释命令行
- 自动化运维
- 批量化重复操作可以编写脚本结合计划任务自动周期运行
- 减轻管理员工作量
- 提高处理文本文件的速度
- 避免配置出错
Linux中有哪些shell
检查一下/etc/shells这个文件(Linux所包含的shell)
shell脚本的概念:
- 将要执行的命令按顺序保存到一个文本文件
- 给该文件可执行权限
- 可结合各种shell控制语句以完成更复杂的操作
shell脚本的构成
- 脚本申明(解释器):若第一行为“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行, #!/bin/bash 为默认解释器。还有其它类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。(Python代码:必须申明解释器**#!/usr/bin/pyhton** 或 #!python 执行文件的其他路径)
- 注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行。
- 可执行语句:比如echo命令,用于输出 " " 之间的字符串
创建shell脚本
- 进入shell脚本编辑
- 执行shell脚本
运行shell脚本
- 进入shell脚本编辑
[root@localhost ~/ysj]# vim dem01.sh
会在脚本的子shell环境中执行脚本中的代码
使用绝对路径或者相对路径指定脚本的路径运行,要求脚本文件必须要有执行权限 x
指定shell程序来直接解释运行脚本
**bash 脚本文件**
**sh**
会在当前的shell环境中执行脚本里的代码操作,也就是脚本文件中的代码或者命令会影响当前shell环境
source 脚本文件
.
管道操作
将管道符号 “ | ” 左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。
重定向操作:
类型 | 操作符 | 用途 |
---|---|---|
重定向输入 | < | 从指定的文件读取数据 |
重定向输出 | > | 将标准输出结果保存到指定的文件,(并且覆盖原内容) |
>> | 将标准输出结果追加到指定的文件的尾部,(不覆盖原有内容) | |
标准错误输出 | 2> | 将错误信息保存到指定的文件,(并且覆盖原有内容) |
2>> | 将错误信息追加到指定文件的文件的尾部,(不覆盖原有内容) | |
混合输出 | &> | 将标准输出、标准错误保存到同一文件中 |
2>&1 | 将标准错误输出重定向到标准输出 |
重定向输出“>”和“>>”
重定向错误输出“2>”
** 混合输出“&>”和“2>&1”**
2>&1 错误输出被重定向到标准输出中,而标准输出被重定向到文件123.txt中,因此错误输出也重定向到文件123.txt中
交互硬件设备
- 标准输入:从该设备接收用户输入的数据
- 标准输出:通过该设备向用户输出数据
- 标准错误:通过该设备报告执行出错误信息
类型 | 设备文件 | 文件描述编号 | 默认设备 |
---|---|---|---|
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误 | /dev/stderr | 2 | 显示器 |
shell变量的作用、类型
变量的作用
用来存放系统和用户需要使用的特定参数(值)
- 变量名:使用固定的名称,由系统预设或用户定义
- 变量值:能够根据用户设置、系统环境的变化而变化
变量的类型
自定义变量
- 定义一个新变量:变量名以字母或下划线开头,区分大小写,建议全大写
-
变量名=变量值 (注意:shell脚本的变量名必须是以字母或者_开头)
- 查看变量 的值
echo $变量名
注意:变量名的值为最后一次的值
[root@localhost ~/ysj]# name=“zhang san”
- read命令获取输入内容的方法:
- 方法一:read -p “请输入一个变量的值:” name"
- 方法二:
[root@localhost yy]# vim demo1.sh
变量作用范围
默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量。当进入子程序或新的子shell环境时,局部变量将无法在使用。
可以通过内部命令export将指定的变量导出为全局变量在所有的子shell环境中能够继续使用。
格式1:export 变量名
格式2:export 变量名=变量值
整数变量的运算
格式:expr 变量1 运算符 变量2 【运算符 变量3】
运算符:
+ | 加法 |
---|---|
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 取余 |
常用的运算表达式:
- i=$(expr 12 * 5)
- i=$((12 * 5))
- i=$[12 * 5]
- let i =12*5
- i++ 相当于 i=$[ $i+1 ]
- i-- 相当于 i=$[ $i-1 ]
- i+=2 相当于 i=$[ $i +2 ]
- 浮点运算:echo “浮点运算表达式” | bc
- awk ‘BEGIN {print 浮点运算表达式}’
环境变量
环境变量由系统提前创建,用来设置用户的工作环境
- env:查看到当前工作环境下的环境变量
- USER:表示用户名称,
- HOME:表示用户的宿主目录
- LANG:表示语言和字符集
- PWD:表示当前所在的工作目录
- PATH:表示可执行程序的默认搜索路径
环境变量的全局配置文件为**/etc/profile**,在此文件中定义的变量作用于所有用户。
每个用户还有自己的独立配置文件(~/.bash_profile)。
位置变量
位置变量并不是用户自定义的,而在shell中可以直接使用,这样一些约定俗成的规则就可以了。
- 定义:当一条命令或脚本执行时,后面可以跟多个参数,我们使用位置参数变量来表示这些参数
$n:n为数字, $0代表命令本身, $1~ $9代表一个到九个参数,十以上的参数需要使用大括号表示,比如第十个参数为 ${10}
预定义变量
$0 | 脚本本身 |
---|---|
$# | 脚本后面跟的参数个数 |
$* 、 $@ | 脚本后面跟的所有参数 |
“$*” | 会把脚本后面跟的所有参数当作一个整体看待 |
“$@” | 会把脚本后面跟的所有参数看作多个以空格分隔的个体 |
$? | 返回上一条Linux命令或者脚本执行的结果,0为执行正常,非0值为执行异常 |
date :
date +“%Y%m%d”
- %Y 年份
- %m month
- %d 按月计的日期
date +“%F”
- %F 完整日期格式,等价于 %Y-%m-%d
[root@localhost ~/yy]# date -d “-1 day” + “%Y%m%d”(前一天)
[root@localhost ~/yy]# date -d “-1 month” + “%Y%m%d”(前一月)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)