1.shell脚本介绍
shell是一种脚本语言 和传统的开发语言比较,会比较简单
shell有自己的语法;可以使用逻辑判断、循环等语法
可以自定义函数,目的就是为了减少重复的代码
shell是系统命令的集合
shell脚本可以实现自动化运维,能大大增加我们的运维效率
2.shell脚本结构和执行
shell脚本的格式
开头需要加#!/bin/bash
以#开头的行作为解释说明
脚本的名字以.sh结尾,用于区分这是一个shell脚本
执行脚本的过程
执行脚本的其他方法
/bin/sh实际是bash的软连接,其实是真正执行的是bash
给脚本增加一个权限可以使用绝对路径来进行执行脚本
sh -x 脚本名称 可以查看脚本执行的过程 sh -n 脚本名称 可以查看脚本有没有语法错误
3.date命令用法
常用格式
date +%Y-%m-%d, date +%y-%m-%d 年月日
date +%H:%M:%S = date +%T 时间
date +%s 时间戳
date -d @1504620492
date -d "+1day" 一天后
date -d "-1 day" 一天前
date -d "-1 month" 一月前
date -d "-1 min" 一分钟前
date +%w, date +%W 星期
4.shell脚本中的变量
当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替(比如a=jdjjdjdddx)
使用条件语句时,常使用变量 if [ $a -gt 1 ]; then ... ; fi
引用某个命令的结果时,用变量替代 n=wc -l 1.txt
写和用户交互的脚本时,变量也是必不可少的 read -p "Input a number: " n; echo $n 如果没写这个n,可以直接使用$REPLY
内置变量 $0, $1, $2… $0表示脚本本身,$1 第一个参数,$2 第二个 .... $#表示参数个数
数学运算a=1;b=2; c=$(($a+$b))或者$[$a+$b]
5.shell脚本中的逻辑判断
if命令的格式:
格式1:if 条件 ; then 语句; fi
格式2:if 条件; then 语句; else 语句; fi
格式3:if …; then … ;elif …; then …; else …; fi
逻辑判断表达式:if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等 -gt (>); -lt(=); -le(<=);-eq(==); -ne(!=) 注意到处都是空格
逻辑判断符号:
符号
释义
对应单词
-gt
大于
greater than
-lt
小于
ess than
-ge
大于或等于
greater than or equal
-le
小于或等于
less than or equal
-eq
等于
equality
-ne
不等于
inequality
可以使用 && || 结合多个条件
if [ $a -gt 5 ] && [ $a -lt 10 ]; then
if [ $b -gt 5 ] || [ $b -lt 3 ]; then
1).f 条件 ; then 语句; fi
2).使用if 条件; then 语句; else 语句; fi
3).if …; then … ;elif …; then …; else …; fi
6.文件目录属性判断
[ -f file ]判断是否是普通文件,且存在
[ -d file ] 判断是否是目录,且存在
[ -e file ] 判断文件或目录是否存在
[ -r file ] 判断文件是否可读
[ -w file ] 判断文件是否可写
[ -x file ] 判断文件是否可执行
判断是否是普通文件,且存在: [ -f file ]
判断是否是目录,且存在: [ -d file ]
并且 && 或者 ||
7.if 特殊用法
if [ -z "$a" ] 逻辑条件是:变量a的值为空
if [ -n "$a" ] 逻辑条件是:变量a的值不为空
if grep -q '123' 1.txt; then 逻辑条件是:1.txt中含有'123'的行
if [ ! -e file ]; then 逻辑条件是:文件不存在
圆括号与方括号的区别:
if (($a<1)); then … 等同于 if [ $a -lt 1 ]; then…
[ ] 中不能使用,==,!=,>=,<=这样的符号
常见的一些用法注意:
if -z或者if -n 都不能作用在文件上,只能作用在变量上
if [ -z "$a" ] 这个表示当变量a的值为空时会怎么样
!-z=-n
!-n=-z
8.case 判断
case 变量名 in
value1)
command
;;
value2)
command
;;
*)
commond
;;
esac
如果case中的某个value是一样的,我们可以这样写:
在case程序中,可以在条件中使用 |,表示或的意思,
比如
2|3)
command
;;
9.for循环
重复执行一系列命令在 编程中很常见。通常你需要重复一组命令直到达到某个特定条件,比如处理某个目录下的所有文件、系统上的所有用户或者是某个文本文件中的所有行。
常见的两种循环,在脚本中普遍被用到。
for循环
while循环
10.while循环
语法 while 条件; do … ; done
11.break跳出循环
break 常用于循环语句中,跳出整个循环语句,直接结束所有循环
12.continue结束本次循环
忽略continue之下的代码,直接进行下一次循环
13.exit退出整个脚本
exit可以定义退出的数值,可以用于确定脚本运行到什么地方的时候,结束