目录
Linux Shell编程规范与变量
一、Shell
shell的作用
命令解释器,“翻译官”
介于系统内核与用户之间,负责解释命令行
常见的shell
bash:基于gun的框架下发展的shell
csh:类似c语言的shell
tcsh:整合了csh提供了更多功能
sh:已经被bash替换
nologin:这个shell可以让用户无法登陆
bash(bin/bash)是目前大多数Linux版采用的默认shell
shell的构成
将命令按顺序一一列出,最后自动执行
执行需要权限,也可以直接调用
脚本申明(解释器):第一行开头“#!/bin/bash”,表示此行一下的代码语句是通过/bin/bash程序来解释执行的
#!/bin/bash为默认的解释器还有其他类型的解释器,#!/bin/python、#!/bin/expect
注释信息:以#开头的语句表示为注释信息
可执行语句:比如echo命令用于输入“ ”之间的字符串
二、脚本
脚本概念
将要执行的命令按顺序保存到一个文本文件
给该文件可执行权限
可结合各种Shell控制语句以完成更复杂的操作
脚本应用场景
重复性操作
交互性任务
批量事务处理
服务运行状态监控
定时任务执行
脚本执行逻辑
顺序执行:程序从上而下顺序执行
选择执行:程序执行过程中,根据条件的不同进行选择不同分支继续执行
循环执行:程序执行过程中需要重复执行多次某段语句
脚本执行方式
指定路径去执行文件(需要有执行权限)
指定解释器去执行(不需要权限)
脚本错误类型
一类命令错误命令出错时不会影响接下来的命令继续
语法错误
逻辑错误
bash -n 脚本名称 (不在当前目录下加绝对路径) //检查语法错误
bash -x 脚本名称(不在当前目录下加绝对路径) //逻辑错误
脚本错误常见的三种区别
语法错误:会导致后续的命令不继续执行,可以用bash -n 检查错误,提示的出错行数不一定准确
命令错误:默认后续的命令还会继续执行,用bash -n 无法检查出来,可以使用bash -x进行观察
逻辑错误:只能使用bash -x 进行
三、重定向与管道操作
交互式硬件设备
标准输入:从该设备接收用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:通过该设备报告执行出错误信息
类型 设备文件 文件编号 默认设备
标准输入 /dev/stdin 0 键盘
标准输出 /dev/stdout 1 显示器
标准错误输出 /dev/stderr 2 显示器
重定向操作
例:将123456重定向输出到pass.txt文件中,然后将pass.txt的内容重定向输入给用户张三的密码,从pass.txt 文件中取密码,需要注意SELinux 会影响此命令执行,若执行失败可尝试关闭SELinux(setenforce 0)
例:追加
ls -lh > test.txt 2>&1 等同于 ls -lh &> test.txt
> (将标准输出结果保存到指定的文件)
2>&1(将标准错误输出重定向到标准输出)
&>(将标准输出、标准错误输出保存到同一文件)
管道操作
管道操作符:“|”: 将管道符号“|"左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道
四、变量
shell变量的作用
用来存放系统和用户需要使用的特定参数(值)
变量名:使用固定的名称,由系统预设或用户定义
变量值:能够根据用户设置、系统环境的变化而变化
shell变量的类型
自定义变量:由用户自己定义、修改和使用
特殊变量:环境变量,只读变量,位置变量,预定义变量
自定义变量
定义新的变量
格式:变量名=变量值
查看定义变量的值
格式:echo $变量名
赋值时使用引导
双引号:允许通过$符号引用其他变量值
单引号:禁止引用其他变量值, $视为普通字符
反撇号:命令替换,提取命令执行后的输出结果,``和 $(…)作用相同
从键盘上输入内容为变量赋值
read命令获取输入内容
格式:read -p 提示信息 变量名
在脚本中编写,在命令行实现read获取
变量的作用范围
局部变量:默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时局部变量将无法再使用
全局变量:可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用
临时设置变量
永久设置变量,需要在/etc/profile 文件里面添加
整数变量的算术计算
运算符:+ 加法、- 减法、* 乘法、/ 除法、% 取余
常见表达式
expr 变量1 运算符 变量2
var=$(expr 变量1 运算符 变量2)
var=$((变量1 运算符 变量2))
var=$ [变量1 运算符 变量2]
let var=变量1 运算符 变量2
使用管道符
expr不可计算小数,并且变量和运算符之间需要空格分隔
计算乘法时,需要使用 “\” 转义符
取余只要除后的余数
随机取余
使用let
i++ 和 ++i
环境变量
使用 env 命令可以查看到当前工作环境下的环境变量
变量USER表示用户名称,HOME表示用户的宿主目录,LANG表示语言和字符集,PWD表示当前所在的工作目录,变量PATH表示可执行程序的默认搜索路径
配置文件:/etc/profile(全局生效)、~/.bash_profile(当前用户环境)
使用awk提取IP地址