欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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脚本的创建和执行

例:
2020.03.26 第十二章

 shell脚本一般以.sh为后缀名
 脚本文件first.sh第1行以#! /bin/bash开头  //表示该文件使用的是bash语法      //如果不设置本行,脚本也可以执行,只是不符合规范
# 为注释     //可以注释该脚本的用途、写脚本的人
  • 执行(两种方法):
    2020.03.26 第十二章
    2020.03.26 第十二章
    ./first.sh //执行shell脚本的前提是脚本本身有执行权限
  • 给执行权限:
    2020.03.26 第十二章
  • 使用sh命令执行一个shell脚本时,加-x选项可查看脚本的执行过程
    2020.03.26 第十二章
  • 额外写错的技巧:
    2020.03.26 第十二章
  • 小技巧:
    第七行报错,修改:
    2020.03.26 第十二章

date命令:

date +%Y 表示以四位数字格式打印年份
date +%y 表示以两位数字格式打印年份
date +%m 表示月份
date +%d 表示日期
date +%H 表示小时
date +%M 表示分钟
date +%S 表示秒
date +%w 表示星期。 //结果显示0则表示周日

例:
2020.03.26 第十二章

  • 一天前的日期:
    2020.03.26 第十二章
  • 一小时前:
    2020.03.26 第十二章
  • 一分钟前:
    2020.03.26 第十二章

shell脚本中的变量

  • 定义变量的格式为:”变量名=变量的值“
在脚本中,引用变量时需要加上符号 $

例:
2020.03.26 第十二章
反引号的作用:将引号中的字符串当成shell命令执行,返回命令的执行结果

  • 执行结果:
    2020.03.26 第十二章

数学运算

例:
2020.03.26 第十二章

数学计算要用[]括起来,并且前面要加符号$
sum=$[$a+$b]    //sum后面不能有空格,不然会没有值

例:
2020.03.26 第十二章

和用户交互

例:
2020.03.26 第十二章

read命令用于和用户交互,它把用户输入的字符串作为变量值。
  • -x选项:查看执行过程
    例:
    2020.03.26 第十二章

shell脚本预设变量

  • /etc/init.d/iptables restart 前面的 /etc/init.d/iptables文件就是一个脚本。
    为什么可以跟restart的字符串?
这涉及到了shell脚本的预设变量。
shell脚本在执行时,后面可以跟一个或多个参数。

例:
2020.03.26 第十二章

$1和$2就是shell脚本的预设变量
$1和$2的值是在执行时分别输入的1和2
$1是脚本的第一个参数,$2是脚本的第二个参数
一个shell脚本的预设变量是没有限制的

echo $?
得到的结果如果不是0,就说明报错

$0代表脚本本身的名字
例:
2020.03.26 第十二章

shell脚本中的逻辑判断

不带else
  • 格式:
if   判断语句;   then
     command
fi     
如果判断语句结果为1,就执行command,
结果为0,直接跳过command,到fi

例:
2020.03.26 第十二章
以((a<60))这样的形式是shell脚本特有的格式
只用一个小括号或不用都会报错

带有else
  • 格式:
if   判断语句;   then
     command
else
     command
fi     
如果判断语句结果为1就执行第一个command,
如果判断语句结果为0,就跳过第一个command,去执行
else下的command

例:
2020.03.26 第十二章

  • f1和f2的区别:如果输入大于或等于60的数字会有提示
    2020.03.26 第十二章
带有elif
  • 格式:
if 判断语句; then
   command
elif 判断语句2; then
   command
else
   command
fi
如果判断语句为1,执行第一个command,直接到fi
如果判断语句为0,就去到判断语句2,
如果判断语句2为1,执行第二个command,到fi
如果判断语句2为0,就执行最后一个command,到fi

例:
2020.03.26 第十二章

&&表示“并且”的意思   ||表示“或者”的意思
除了(()),还可以使用[],而不能使用>、<、=
大小等于使用:-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

中括号两边要留有空格,否则会报错
2020.03.26 第十二章

和文档相关的判断

  • if常用的选项:
    -e:判断文件或目录是否存在
    -d:判断是不是目录以及是否存在
    -f:判断是不是普通文件以及是否存在
    -r:判断是否有读权限
    -w:判断是否有写权限
    -x:判断是否可执行
  • 使用if判断的具体格式:
if [ -e filename ]; then
   command
   fi

例:
2020.03.26 第十二章

因为/home/是目录而非文件,所以不显示ok
case逻辑判断
  • 格式:
case 变量 in
value1)
				command
				;;
value2)
				command
				;;
value3)
				command
				;;		
*)
				command
				;;
esac		
变量和value1匹配,就执行第一个command;
和value2匹配,就执行第二个command;
和第三个匹配,以此类推;
如果和value1,2,3都不匹配,就匹配*)去执行

不限制value个数,*代表其他值
例:
2020.03.26 第十二章

shell脚本中的循环

for循环

例:
2020.03.26 第十二章

seq 1 5表示从1到5的一个序列
  • 格式:
for 变量名 in 循环的条件; do
	command
done
“循环的条件”可以是一组字符串或数字(用一个或多个空格隔开),也可以是一条命令的执行结果。

例:
2020.03.26 第十二章

“循环的条件”还可以引用系统命令的执行结果(如seq 1 5),但必须用反引号括起来

例:
2020.03.26 第十二章

while循环
  • 格式:
while 条件; do
		command
done

例:
2020.03.26 第十二章

可用一个冒号代替循环条件,就做到死循环:
while :; do
	command
	sleep 3
done

shell脚本中的函数

  • shell脚本中的函数:先把一段代码整理到一个小单元中,并给此小单元命名,当用到这段代码时直接调用此小单元的名字。
  • 可用函数名代替。
    任何语句后面不能加;
  • 格式:
function 函数名()
{
	command1
	command2
}

例:
2020.03.26 第十二章
在shell脚本中,函数一定要写在前面,不能出现在中间或最后。因为函数时要被调用的,如果还没出现就被调用,就会出错。

shell脚本中的中断和继续

break
  • 在脚本中使用break,表示退出该层循环
  • 嵌套循环,大循环里还有小循环,break仅仅退出那一层循环,它的上层循环不受影响
    例:
    2020.03.26 第十二章
    ==空格!空格! ==
continue
  • 和break不同,当在shell脚本中遇到continue时,结束的不是整个循环,而是本次循环。
    例:
    2020.03.26 第十二章
exit
  • 作用范围更大,直接退出整个shell脚本
    2020.03.26 第十二章
相关标签: linux