shell属于非类型的解释型语言,在使用变量时不像C++、JAVA语言编程时需要事先声明变量,shell给一个变量赋值,实际上就是定义了变量,在Linux支持的所有shell中,都可以用赋值符号“=”为变量赋值,shell为弱类型语言,定义变量不需要声明类型,如果在使用时需要明确变量的类型,可以使用declare指定类型,declare常见参数如下:
•□ +/-:“-”可用来指定变量的属性,“+”为取消变量所设的属性。
•□ -f:仅显示函数。
•□ r:将变量设置为只读。
•□ x:指定的变量会成为环境变量,可供shell以外的程序来使用。
•□ i:指定类型为数值,字符串或运算式。
shell编程中变量分为3种:系统变量、环境变量、用户变量,其中系统变量在对参数判断和命令返回值判断时使用,而环境变量则主要是在程序运行时需要设置,用户变量又称为局部变量,多使用在shell脚本内部或者临时局部。
shell变量名在定义时,首个字符必须为字母(a~z,A~Z),不能以数字开头,中间不能有空格,可以使用下画线“_”,不能使用“-”,也不能使用标点符号等。
例如定义变量A=123,定义这样一个变量,A为变量名,123是变量的值,变量名有格式规范,变量的值可以随意指定。变量定义完成,如需要引用变量,可以使用$A。
var.sh脚本内容如下:
#!/bin/bash
#By author yunwei
A=123
echo “今天饭前为$A 斤”
执行该shell脚本,结果将会显示“今天饭前为123 斤”。shell常见的系统变量、环境变量、用户变量详解如下。
(1)shell编程常见系统变量如下:
•□ $0:当前脚本的名称。
□ $n:当前脚本的第n个参数,n=1,2,…,9。
•□ $∗:当前脚本的所有参数(不包括程序本身)。
•□ $#:当前脚本的参数个数(不包括程序本身)。
•□ $?:命令或程序执行完后的状态,返回0表示执行成功。
•□ $$:程序本身的PID号。
(2)shell编程常见环境变量如下:
•□ PATH:命令所示路径,以冒号为分割。
•□ HOME:打印用户家目录。
•□ SHELL:显示当前shell类型。
•□ USER:打印当前用户名。
•□ ID:打印当前用户ID信息。
•□ PWD:显示当前所在路径。
•□ TERM:打印当前终端类型。
•□ HOSTNAME:显示当前主机名。
(3)shell编程用户变量如下:
•□ A=jfedu.net:自定义变量A。
•□ N_SOFT=nginx-1.12.0.tar.gz:自定义变量N_SOFT。
•□ BACK_DIR=/data/backup/:自定义变量BACK_DIR。
•□ IP1=192.168.1.11:自定义变量IP1。
•□ IP2=192.168.1.12:自定义变量IP2。
创建echo打印菜单shell脚本,代如下:
#!/bin/bash
#auto install httpd
#By author yunwei
行脚本,执行结果如图所示。
Linux shell编程中,if、for、while、case等条件流程控制语句用得非常多,熟练掌握以上流程控制语句及语法的实战,对编写shell脚本有非常大的益处。
if条件判断语句,通常以if开头,fi结尾。也可加入else或者elif进行多条件的判断,if表达式如下:
f语句shell脚本编程案例如下。
(1)比较两个整数大小,代码如下:
(2)判断系统目录是否存在,代码如下:
if常见的判断逻辑运算符详解如下:
•□ -f:判断文件是否存在,例如if[-f filename]。
•□ -d:判断目录是否存在,例如if[-d dir]。
•□ -eq:等于,应用于整型比较,即equal。
•□ -ne:不等于,应用于整型比较,即not equal。
•□ -lt:小于,应用于整型比较,即letter。
•□ -gt:大于,应用于整型比较,即greater。
•□ -le:小于或等于,应用于整型比较。
•□ -ge:大于或等于,应用于整型比较。
•□ -a:双方都成立(and),用法为逻辑表达式-a逻辑表达式。
•□ -o:单方成立(or),用法为逻辑表达式-o逻辑表达式。
•□ -z:空字符串。
•□ ‖:单方成立。
•□ &&:双方都成立表达式。
If 语句括号的使用总结
1、如果是用> 、< 、 <= 、>= 比较数值的大小的话用(( ))
2、如果单独使用 -d -f -lt -gt -lt -ge -le -ne -f 用[] [[ ]]都可以
3、如果配合-a -o 使用要使用[]
(3)if多个条件测试分数判断,代码如下:
if判断括号区别
在使用if语句时,经常会使用()、(())、[]、[[]]、{}等括号,以下为几种括号简单区别对比。
•□ ():用于多个命令组、命令替换、初始化数组。
•□ (()):整数扩展、运算符、重定义变量值,算术运算比较。
•□ []:bash内部命令,“[”与test是等同的,正则字符范围、引用数组元素编号,不支持“+”、“-”、“∗”、“/”数学运算符,逻辑测试使用-a、-o。
•□ [[]]:bash程序语言的关键字,不是一个命令,[[]]结构比[]结构更加通用,不支持“+”、“-”、“∗”、“/”数学运算符,逻辑测试使用&&、‖。
•□ {}:主要用于命令集合或者范围,例如mkdir-p/data/201{7,8}/。
MySQL数据库备份脚本
MySQL数据库备份是运维工程师的工作之一,以下为自动备份MySQL数据库脚本,代码如下:
for循环语句实战
for循环语句主要用于对某个数据域进行循环读取、对文件进行遍历,通常用于循环某个文件或者列表。其语法格式以for…do开头,done结尾。语法格式如下:
for循环语句shell脚本编程案例如下。
(1)循环打印BAT企业官网,代码如下:
(2)循环打印1~100数字,seq表示列出数据范围,代码如下:
(3)for循环求1~100的总和,代码如下:
(4)对系统日志文件进行分组打包,代码如下:
while循环语句实战
while循环语句与for循环功能类似,主要用于对某个数据域进行循环读取、对文件进行遍历,通常用于循环某个文件或者列表,满足循环条件会一直循环,不满足则退出循环,其语法格式以while…do开头,done结尾。语法格式如下:
while循环语句shell脚本编程案例如下。
(1)循环打印BAT企业官网,read指令用于读取行或者读取变量,代码如下:
while read line
do
echo $line
done < shell.txt
其中jfedu.txt内容如下:
(2)while无限每秒输出Hello World,代码如下
(3)循环打印1~100数字,expr用于运算逻辑工具,代码如下:
(4)while循环求1~100的总和,代码如下:
(5)while循环逐行读取文件,代码如下:
(6)while循环判断输入IP正确性,代码如下:
(7)每5s循环判断/etc/passwd是否被非法修改,代码如下: