Linux基础五(shell脚本)

一、shell

  • 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言

二、编写shell脚本

  • 添加注解:
    文件头部为#!/bin/bash或#!/bin/sh或不写,建议写上
  • 执行方式
    1.sh shell脚本 例如:sh hello.sh
    2.bash shell脚本 例如:bash hello.sh
    3.修改权限为可执行的,然后./shell脚本(默认是bash) 例如:./hello.sh

1)普通shell脚本

编写脚本
在这里插入图片描述
添加注释,和文本
在这里插入图片描述

运行脚本

在这里插入图片描述

2)含变量的脚本

  • 变量不需要声明,初始化不需要指定类型,变量可以动态转换

  • 变量命名:

    • 1:只能使用数字,字母和下划线,且不能以数字开头
    • 2:变量名区分大小写
    • 3:建议变量的名称要通俗易懂
  • 赋值:变量赋值是通过等号(=)进行赋值,在变量、等号和值之间不能出现空格。

  • 输出:加上$变量名,也可以使用 ${变量名}

编写脚本
在这里插入图片描述
加上{}后面可以接着给值在这里插入图片描述

运行脚本
echo $x
在这里插入图片描述
echo &{x}这是一个变量
在这里插入图片描述
修改变量,不能 ${x}=xx 只能采取以新的变量重新赋值
在这里插入图片描述
在这里插入图片描述

3)传参,位置变量

 脚本中使用位置变量  ($数字) 来进行占位 等待参数的传递
		格式:$数字 获取某一个位置上的值
		 	 $# 获取参数的个数,不包括脚本名
			$* 获取参数的值
		注意:把脚本名称的$0的参数忽略不计
		注意:0开始接收,接收不到就不显示,可以跳着接收,
			$0永远都是脚本名称
			$数字:数字大于一位数时,需要加上边界{}

在这里插入图片描述
在这里插入图片描述

4)字符串

在/etc/profile中自定义的变量,在哪里都能使用

在这里插入图片描述
在这里插入图片描述
可以看到以字符串输出,并没有输出变量的值,要想输出变量的值,需加上个引用$

在这里插入图片描述
在这里插入图片描述

  • 单引号:内容按原字符串进行输出
    不能使用转义符
  • 双引号:可以引用变量
    可以使用转义符
  • 没引号:可以引用变量
    可以使用转义符
    在这里插入图片描述
    单引号报错在这里插入图片描述
    更改
    在这里插入图片描述
    在这里插入图片描述

1.拼接和字符串的长度

拼接:直接引用多个变量
		例如:x=${name}${age}
字符串的长度:
		格式:${#变量名}

在这里插入图片描述

在这里插入图片描述

2.字符串的截取

格式:${变量名:开始位置:截取长度}

在这里插入图片描述

在这里插入图片描述

3.字符串的替换

		替换第一个出现的字符串格式:${变量名/原字符串内容/新字符串内容}
    	替换所有格式:${变量名//原字符串内容/新字符串内容}
    	注意:替换不会在原字符串上修改

在这里插入图片描述
在这里插入图片描述

4.字符串的删除

会生成一个新的字符串,不会在原字符串上发生修改

    	#:从头开始删除(匹配第一个)
    		格式:${变量名#条件}
    		例如:${str#*,}:删除第一个逗号之前包括逗号的所有内容
    	##:从头开始删除(匹配最后一个)
    		格式:${变量名##条件}
    		例如:${str##*,}:删除最后一个逗号之前包括逗号的所有内容
    	%:从尾开始删除(匹配第一个)
    		格式:${变量名%条件}
    		例如:${str%,*}:删除第一个逗号之前包括逗号的所有内容
    	%%:从尾开始删除(匹配最后一个)
    		格式:${变量名%%条件}
    		例如:${str%%,*}:删除最后一个逗号之前包括逗号的所有内容

在这里插入图片描述
在这里插入图片描述

5)数组

存储多个元素

  	格式:变量名=(元素1 元素2....元素n)
    	操作:${变量名[下标]}
    	注意:${list}直接输出变量名,结果就是下标为0的值
    	     ${list[*]} 获取所有的元素
    	获取个数:
    		${#变量名[*]}

引用数组,如果不指定下标,默认输出小标为零的元素
在这里插入图片描述

在这里插入图片描述

6)基本运算符

算术运算符
注意表达式中各数和运算符之间要加空格隔开

方式1:通过expr这个表达式计算工具
	    	格式:`expr 表达式`
	    	注意:表达式中运算符两变需要加空格
方式2:通过[]
	    	格式:$[表达式]

支持加减除,不支持*
在这里插入图片描述
支持加减乘除
在这里插入图片描述
比较运算符:

		格式:[1 符号 值2]
		注意:使用[],符号两端加不加空格都行,[]两端加不加都行,不能使用字母(-gt)
			 比较等于时,使用==
			直接引用结果 0表示false 1表示true

在这里插入图片描述

7)if语句

  • 判断条件:四种
    • 1.使用test进行判断,用于检测结果是否正确
    • 2.使用[],符号和符号表达式都可以使用,如果使用的是符号需要加上转义符
      注意:符号和[]两边需要加空格
    • 3.使用[[]],符号和符号表达式都可以使用
      注意:符号和[]两边需要加空格
    • 4.使用(()),只能使用符号
      注意:符号和()两边不需要加空格

判断方法一

在这里插入图片描述
在这里插入图片描述
判断方法二
在这里插入图片描述
在这里插入图片描述
判断方法三
判断方法四
在这里插入图片描述
在这里插入图片描述

	格式1:if 判断条件
		then
			执行语句
		 fi
	格式2:
		if 判断条件
		then
			执行语句
		else
			执行语句
		fi
	格式3:
		if 判断条件
		then 
			执行语句
		elif 判断条件
		then
			执行语句
		fi
	如果有两个判断条件
		格式:((判断条件 &  判断条件))
			((((判断条件)) &  ((判断条件))))

8)键盘录入read

格式1:read 变量
格式2:read 变量1 变量2
注意:使用格式2时,键盘录入的需要以空格进行切分
在这里插入图片描述
在这里插入图片描述
echo输出默认换行,不换行写法 echo -n 输出结果

9)for循环

for循环:
		格式1:for ((初始化变量;判断条件;控制语句))
			  do
			  	执行语句
			  done
			例如:for ((i=1;i<=100;i++))
				 do
				 	echo ${i}
				 done
		格式2:for 变量 in 结果集
			  do
			  	执行语句
			  done
			例如:for i in {1..100}
				 do
				 	echo ${i}
				 done

案例:求1到100的奇数和和偶数和

 {开始..结束}:表示开始位置到结束位置所有的数字

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

注意:
       累加的操作:osum=`expr ${i} + ${osum}`
		          osum=$[${i}+${osum}]
		          let osum+=i
		        使用let之后 在引用变量进行计算时,不需要在使用$,+=是进行计算不再是拼接

案例:打印5*5的三角形

在这里插入图片描述
在这里插入图片描述

10)函数

方法定义:函数名称(){
				方法体
			}
		方法调用:直接使用方法名称
		参数传递:通过$数字,来进行接收,$0永远是脚本名称,方法调用时传递参数
		返回值:return 
		接收返回值:$?
		注意:return只能return数字 $?接收当前执行的状态,只接收一次

带参函数,在函数名后面传参,有返回值,只接受一次
在这里插入图片描述
在这里插入图片描述
带参函数,在执行脚本后面传参
在这里插入图片描述
在这里插入图片描述
无参无返回值
在这里插入图片描述
在这里插入图片描述

11)日期,定时器

获取当前日期时间,字母大小写必须严格和下面一样,模板可以不一样
		date +"%Y-%m-%d %H:%M:%S"

在这里插入图片描述
在这里插入图片描述
加减日期时间
date +%Y%m%d //显示前天年月日
date +%Y%m%d --date="+1 day" //显示前一天的日期
date +%Y%m%d --date="-1 day" //显示后一天的日期
date +%Y%m%d --date="-1 month" //显示上一月的日期
date +%Y%m%d --date="+1 month" //显示下一月的日期
date +%Y%m%d --date="-1 year" //显示前一年的日期
date +%Y%m%d --date="+1 year" //显示下一年的日期

12)重定向

重定向:每输入一个命令都会打开三个文件
		标准输入文件(stdin):stdin的文件描述符为0,默认从stdin读取数据。
		标准输出文件(stdout):stdout 的文件描述符为1,默认向stdout输出数据。
		标准错误文件(stderr):stderr的文件描述符为2,向stderr流中写入错误信息
	重定向时,默认不会把文件描述符为2,写入到文件中,想要写入
	需要:ll data.txt data1.txt 2>test.txt
	    data.txt存在 data1.txt不存在的
	    ls: 无法访问data1.txt: 没有那个文件或目录 ---------------2
		-rw-r--r--. 1 root root 6 9月  17 14:09 data.txt-------1
	如果想要把1和2都重定向到文件中
	需要:ll data.txt data1.txt >test.txt 2>&1
xx > yy   xx 是要写入的内容,yy是要写入的文件

当前目录下有一个文件,文件中的内容为hello
在这里插入图片描述
默认将正确信息写入新文件中
在这里插入图片描述
要想错误的写入,需加个2

>>>的区别,>> 是追加  > 是覆盖

在这里插入图片描述

想把错误的和正确的都写入
在这里插入图片描述
直接将字符串追加到文件中
在这里插入图片描述

13)定时器

创建定时任务:crontab -e
执行该指令会打开一个文件,在该文件中写定时任务
注意里面的文件要加绝对路径
前面为定时的时间

第一个* 代表分钟  取值范围0~59
第二个* 代表小时  取值范围0~23
第三个* 代表日期  取值范围1~31
第四个* 代表月份  取值范围1~12
第五个* 代表星期几  取值范围0~6 代表星期日
* * * * *  默认为一分钟执行一次
*/5* * * *5分钟执行一次
0 * * * *分钟每到零的时候执行一次,即每小时执行一次
0 0 * * *每个00分执行一次,即每天执行一次
0 0 * * 0每周执行一次
0 0 1 * *每月执行一次
=====================================
0 */2 * * * 每两小时执行一次
0 23-7/28 * * * 晚上11点到早上8点,每两小时执行一次
0 11 * * 1-3星期一到星期三的11点执行一次

查看定时任务的日志: tail -f /var/log/cron

演示
由于定时执行的命令可能会很长,此处可以编写shell脚本,直接在定时器中加上运行脚本的指令就可
创建一个脚本
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
将脚本写入定时器,实现每分钟执行一次

在这里插入图片描述
在这里插入图片描述
查看定时器日志
可以看到每隔一分钟多了一条日志
在这里插入图片描述
查看data看看定时任务有没有执行成功

在这里插入图片描述
注意:定时器的任务,不用的要及时清了,或者注释掉,或者每次都会执行,直至磁盘写满

清除后再查看日志,可以看到日志不再执行定时任务
在这里插入图片描述

java
java入门基础学习(一)
java入门基础学习(二)
java入门基础学习(三)
java入门基础学习(四)
java入门基础学习(五)
java入门基础学习(六)
java入门基础学习(七)
java入门基础学习(八)
java入门基础学习(九)
java入门基础学习(十)
java入门基础学习(十一)
java入门基础学习(十二)
java入门基础学习(十三)
java入门基础学习(十四)Maven Git
java总结,题目+笔记
java进阶之常见对象(一)
java进阶之常见对象(二)
java进阶之冒泡排序
java进阶之选择排序
java进阶之面向对象(封装)
java进阶之面向对象(代码块、继承)
java进阶之面向对象(多态、抽象、接口)
java进阶之匿名内部类、访问修饰符、包
java进阶之io流(字节流,字符流)
java应用一(反射的应用)
java应用二(配置文件、工具类)
java应用三(数据库索引、spring)
java应用四(连接池)
Linux
Linux基础一
Linux基础二
Linux基础三
Linux基础四
Mysql
mysql一
mysql二
mysql三
mysql四
java连接数据库
redis
redis一(缓存,redis简介)
redis二(单节点安装,桌面插件)
redis三(指令的使用)
redis四(java与redis的连接,基本指令在java中的操作)
redis五(练习)
redis七(持久化)
redis九(集群安装)
Hadoop
hadoop学习一
hadoop学习二
hadoop学习三
hadoop学习四
hadoop学习五
hadoop学习六
hadoop学习七
hadoop学习八
hadoop异常处理
hadoop基础学习九
hadoop基础学习十
hadoop基础学习十一
hadoop基础学习十四
hadoop基础学习十五

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值