2020.03.26 第十二章
程序员文章站
2024-03-17 17:40:40
...
什么是shell脚本
- shell脚本不能作为正式的编辑语言,因为它是在linux的shell中运行的,所以称为shell脚本。
shell脚本是一些命令的集合:
得掌握命令
- 操作例:
- 1.进入/tmp/目录
- 2.列出当前目录中所有的文件名
- 3.把所有当前的文件复制到/root/目录下
- 4.删除当前目录下所有的文件
shell脚本:
把多有操作记录到一个文档中→调用文档中的命令
- 利:方便管理服务器
- 建议:自定义的shell目录:/usr/local/sbin
shell脚本的创建和执行
例:
shell脚本一般以.sh为后缀名
脚本文件first.sh第1行以#! /bin/bash开头 //表示该文件使用的是bash语法 //如果不设置本行,脚本也可以执行,只是不符合规范
# 为注释 //可以注释该脚本的用途、写脚本的人
-
执行(两种方法):
./first.sh //执行shell脚本的前提是脚本本身有执行权限
-
给执行权限:
-
使用sh命令执行一个shell脚本时,加-x选项可查看脚本的执行过程
-
额外写错的技巧:
-
小技巧:
第七行报错,修改:
date命令:
date +%Y | 表示以四位数字格式打印年份 |
---|---|
date +%y | 表示以两位数字格式打印年份 |
date +%m | 表示月份 |
date +%d | 表示日期 |
date +%H | 表示小时 |
date +%M | 表示分钟 |
date +%S | 表示秒 |
date +%w | 表示星期。 //结果显示0则表示周日 |
例:
-
一天前的日期:
-
一小时前:
-
一分钟前:
shell脚本中的变量
- 定义变量的格式为:”变量名=变量的值“
在脚本中,引用变量时需要加上符号 $
例:反引号的作用:将引号中的字符串当成shell命令执行,返回命令的执行结果
-
执行结果:
数学运算
例:
数学计算要用[]括起来,并且前面要加符号$
sum=$[$a+$b] //sum后面不能有空格,不然会没有值
例:
和用户交互
例:
read命令用于和用户交互,它把用户输入的字符串作为变量值。
- -x选项:查看执行过程
例:
shell脚本预设变量
- /etc/init.d/iptables restart 前面的 /etc/init.d/iptables文件就是一个脚本。
为什么可以跟restart的字符串?
这涉及到了shell脚本的预设变量。
shell脚本在执行时,后面可以跟一个或多个参数。
例:
$1和$2就是shell脚本的预设变量
$1和$2的值是在执行时分别输入的1和2
$1是脚本的第一个参数,$2是脚本的第二个参数
一个shell脚本的预设变量是没有限制的
echo $?
得到的结果如果不是0,就说明报错$0代表脚本本身的名字
例:
shell脚本中的逻辑判断
不带else
- 格式:
if 判断语句; then
command
fi
如果判断语句结果为1,就执行command,
结果为0,直接跳过command,到fi
例:以((a<60))这样的形式是shell脚本特有的格式
只用一个小括号或不用都会报错
带有else
- 格式:
if 判断语句; then
command
else
command
fi
如果判断语句结果为1就执行第一个command,
如果判断语句结果为0,就跳过第一个command,去执行
else下的command
例:
- f1和f2的区别:如果输入大于或等于60的数字会有提示
带有elif
- 格式:
if 判断语句; then
command
elif 判断语句2; then
command
else
command
fi
如果判断语句为1,执行第一个command,直接到fi
如果判断语句为0,就去到判断语句2,
如果判断语句2为1,执行第二个command,到fi
如果判断语句2为0,就执行最后一个command,到fi
例:
&&表示“并且”的意思 ||表示“或者”的意思
除了(()),还可以使用[],而不能使用>、<、=
大小等于使用:-lt(小于)、-gt(大于)、-le(小于或等于)、
-ge(大于或等于)、-eq(等于)、-ne(不等于)
# a=10;if [ $a -lt 1 ] || [ $a -gt 5 ]; then echo ok; fi
ok
# a=10;if [ $a -lt 1 ] || [ $a -gt 10 ]; then echo ok; fi
ok
中括号两边要留有空格,否则会报错
和文档相关的判断
-
if常用的选项:
-e:判断文件或目录是否存在
-d:判断是不是目录以及是否存在
-f:判断是不是普通文件以及是否存在
-r:判断是否有读权限
-w:判断是否有写权限
-x:判断是否可执行 - 使用if判断的具体格式:
if [ -e filename ]; then
command
fi
例:
因为/home/是目录而非文件,所以不显示ok
case逻辑判断
- 格式:
case 变量 in
value1)
command
;;
value2)
command
;;
value3)
command
;;
*)
command
;;
esac
变量和value1匹配,就执行第一个command;
和value2匹配,就执行第二个command;
和第三个匹配,以此类推;
如果和value1,2,3都不匹配,就匹配*)去执行
不限制value个数,*代表其他值
例:
shell脚本中的循环
for循环
例:
seq 1 5表示从1到5的一个序列
- 格式:
for 变量名 in 循环的条件; do
command
done
“循环的条件”可以是一组字符串或数字(用一个或多个空格隔开),也可以是一条命令的执行结果。
例:
“循环的条件”还可以引用系统命令的执行结果(如seq 1 5),但必须用反引号括起来
例:
while循环
- 格式:
while 条件; do
command
done
例:
可用一个冒号代替循环条件,就做到死循环:
while :; do
command
sleep 3
done
shell脚本中的函数
- shell脚本中的函数:先把一段代码整理到一个小单元中,并给此小单元命名,当用到这段代码时直接调用此小单元的名字。
- 可用函数名代替。
任何语句后面不能加;
- 格式:
function 函数名()
{
command1
command2
}
例:在shell脚本中,函数一定要写在前面,不能出现在中间或最后。因为函数时要被调用的,如果还没出现就被调用,就会出错。
shell脚本中的中断和继续
break
- 在脚本中使用break,表示退出该层循环
- 嵌套循环,大循环里还有小循环,break仅仅退出那一层循环,它的上层循环不受影响
例:
==空格!空格! ==
continue
- 和break不同,当在shell脚本中遇到continue时,结束的不是整个循环,而是本次循环。
例:
exit
- 作用范围更大,直接退出整个shell脚本
上一篇: Android代码优化
下一篇: Android优化UI篇