Linux学习(九)Shell编程

一、入门案例及运行方法

编写一个输出语句的shell脚本,注意:脚本必须以#!/bin/bash开头,其中#:<<! !是注释方法。
在这里插入图片描述

首先我们可以看出该shell脚本没有执行权限
在这里插入图片描述
目前这个状态只能通过sh demo.sh来运行:
在这里插入图片描述
或者给该文件加上执行权限,再直接运行:
在这里插入图片描述

二、变量

Linux Shell 中的变量分为,系统变量和用户自定义变量。
系统变量: H O M E 、 HOME、 HOMEPWD、 S H E L L 、 SHELL、 SHELLUSER 等等,比如: echo $HOME 等等…

查看系统变量:
在这里插入图片描述

通过set可以看到当前shell的所有变量:
在这里插入图片描述

1.自定义变量案例:
#!/bin/bash
#案例  1:定义变量A 
A=100
#输出变量需要加上$ 
echo A=$A
echo  "A=$A"
#案例  2:撤销变量A
unset A
echo  "A=$A"
#案例  3:声明静态的变量  B=2,不能 unset 
readonly  B=2
echo  "B=$B" 
#unset  B
#将指令返回的结果赋给变量 :
C=`date`
D=$(date)
echo  "C=$C" 
echo  "D=$D" 
#使用环境变量  JAVA_HOME 
echo  "java_home=$JAVA_HOME" 

如果撤销变量b会报异常!

在这里插入图片描述

2.设置环境变量,其实上面的JAVA_HOME就是在/etc/profiles文件中设置的
#(功能描述:将 shell 变量输出为环境变量/全局变量)
export 变量名=变量值 
#(功能描述:让修改后的配置信息立即生效)
source 配置文件
# (功能描述:查询环境变量的值)
echo  $变量名

比如我在demo.sh中新增下面的一行,并用source语句刷新
在这里插入图片描述
我们发现linux系统已经能识别A这个全局变量了!
在这里插入图片描述

3.位置参数变量
#!/bin/bash
echo "0=$0 1=$1 2=$2"
echo "所有参数=$*"  #会把所有参数看成一个整体
echo "所有参数=$@"   #会把所有参数分开
echo "参数个数=$#"

在这里插入图片描述

4.预定义变量
  1. $$ 功能描述:当前进程的进程号(PID))

  2. $! (功能描述:后台运行的最后一个进程的进程号(PID))

  3. $?(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变 量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

#!/bin/bash
echo  "当前执行的进程 id=$$"
#以后台的方式运行一个脚本,并获取他的进程号 
/luzelong/shellcode/demo.sh &
echo  "最后一个后台方式运行的进程 id=$!" 
echo  "执行的结果是=$?"

在这里插入图片描述

三、运算符

a=$((运算式))
b=$[运算式]
#注意 expr 运算符间要有空格,乘号要写成 \*
c='expr m + n'
案例演示:
#!/bin/bash
#案例  1:计算(2+3)X4  的值 #使用第一种方式
RES1=$(((2+3)*4))
echo  "res1=$RES1"
#使用第二种方式, 推荐使用 
RES2=$[(2+3)*4]
echo  "res2=$RES2"
#使用第三种方式 expr 
TEMP=`expr 2  + 3` 
RES4=`expr $TEMP \*  4` 
echo  "temp=$TEMP"
echo  "res4=$RES4"
#案例  2:请求出命令行的两个参数[整数]的和 20 50 
SUM=$[$1+$2]
echo "sum=$SUM"

在这里插入图片描述

四、条件判断

#非空返回 true,可使用$?验证(0  为 true,>1  为 false)
[ condition ](注意 condition 前后要有空格)
#条件满足,执行后面的语句
[condition]&&echoOK||echonotok

常用判断条件

  1. = 字符串比较
  2. 两个整数的比较
    -lt 小于
    -le 小于等于 little equal -eq 等于
    -gt 大于 -ge 大于等于 -ne 不等于
  3. 按照文件权限进行判断
    -r 有读的权限 -w 有写的权限 -x 有执行的权限
  4. 按照文件类型进行判断
    -f 文件存在并且是一个常规的文件 -e 文件存在
    -d 文件存在并是一个目录
#!/bin/bash
#案例1:"ok"是否等于“ok”
if [ "ok" = "ok" ]
then
	echo "相等"
fi
#案例2:判断23是否大于等于22
if [ 23 -ge 22 ]
then
	echo "大于"
fi
#案例3:	/luzelong/shellcode/demo.sh 是否存在
if [ -f /luzelong/shellcode/demo.sh ]
then
	echo "存在"
fi
#其他案例
if [ luzelong ]
then
	echo "hello,luzelong!"
fi

在这里插入图片描述

五、流程控制

1.if判断实现流程控制
#!/bin/bash
#案例:请编写一个shell程序,如果输入参数大于等于60,则输出及格了,否则输出不及格
if [ $1 -ge 60 ]
then
	echo "及格了"
elif [ $1 -lt 60 ]
then
	echo "不及格"
fi

在这里插入图片描述

2.case语句实现流程控制
#!/bin/bash
#案例:当命令行参数是1时,输出周一,参数是2时,输出周二,参数为其他时,输出other..
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other..."
;;
esac

在这里插入图片描述

六、循环语句

1.for循环
#!/bin/bash
#案例1:打印命令行输入的参数[这里可以看出$*和$的区别]
#注意$*是把输入的参数,当做一个整体,所以,只会输出一句
for i in "$*"
do
	echo "num is $i"
done

echo "================================"
#使用$@来获取输入的参数,注意,这时是分别对待,所以有几个参数,就输出几行
for i in "$@"
do
	echo "num is $i"
done

在这里插入图片描述

#!/bin/bash
#案例2:算0加到100的值
SUM=0
for(( i=1;i<=100;i++))
do 
	SUM=$[$SUM+$i]
done
echo "总和SUM=$SUM"

在这里插入图片描述

2.while循环
#!/bin/bash
#案例:从命令行输入一个数n,统计1+2+...+n的值
SUM=0
i=0
while [ $i -le $1 ]
do
	SUM=$[$SUM+$i]
	#i自增
	i=$[$i+1]
done
echo "执行结果=$SUM"

在这里插入图片描述

七、read读取控制台输入

#!/bin/bash
#案例1:读取控制台输入一个NUM1值
read -p "请输入一个数NUM1=" NUM1
echo "你输入的NUM1=$NUM1"
#案例2:读取控制台输入一个NUM2值,在10s内输入
read -t 10 -p "请输入一个数NUM2=" NUM2
echo "你输入的NUM2=$NUM2"

在这里插入图片描述

八、函数

1.系统函数
#basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
#suffix 为后缀,如果suffix 被指定了,basename会将 pathname  或 string 中的 suffix  去掉。
basename  [pathname] [suffix]
#从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩 下的路径(目录的部分)
dirname /home/aaa/test.txt

在这里插入图片描述

2.自定义函数
#!/bin/bash
#案例 1:计算输入两个参数的和(动态的获取), getSum
#定义函数  getSum 
function getSum() {
	SUM=$[$n1+$n2] 
	echo  "和是=$SUM"
}
#输入两个值
read -p "请输入一个数 n1=" n1 
read -p "请输入一个数 n2=" n2 #调用自定义函数
getSum $n1  $n2

在这里插入图片描述

九、经典的综合案例

比如我要完成下面的功能:

1)每天凌晨2:30备份数据库jjy到/data/backup/db
2)备份开始和备份结束能够给出相应的提示信息
3)备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,比如:2021-03-12_230201.tar.gz4)在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。

1.创建数据库

在这里插入图片描述
具体的shell代码如下:

#!/bin/bash
#备份目录
BACKUP=/data/backup/db
#当前时间
DATETIME=$( date +%Y-%m-%d_%H%M%S )
echo $DATETIME
#数据库的地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=luzelong1124
#备份的数据库名
DATABASE=jjy
#创建备份目录,如果不存在,就创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
#备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz
#将文件处理成tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
#删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
#删除10天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "备份数据库${DATABASE}成功~"

如果单独执行,则是下面的运行情况:
在这里插入图片描述
如果想要每天凌晨2点半定时执行该任务则需要用到crontab -e语句
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 《Linux与Unix Shell编程指南》是一本比较经典的技术书籍,其内容涵盖了Linux和Unix系统下的Shell编程Shell是一种命令行解释器,它能够让用户通过输入命令来与操作系统进行交互。 该书的主要内容包括介绍了Shell编程的基本概念、语法、常用命令和技巧。通过讲解Shell的语法和基本命令,读者可以提高自己 Shell 编程的能力,并学会如何编写脚本来完成一些自动化的操作。此外,书中还介绍了一些高级的 Shell 编程技巧,例如使用正则表达式、函数编程、流程控制等。 由于Linux和Unix系统广泛应用于服务器和计算机集群等领域,因此Shell编程技能也成为了很多IT从业者必备的技能之一。掌握Shell编程不仅可以提高工作效率,还能提高对系统的了解和理解,对于系统管理员、开发人员和软件测试人员等IT从业者来说都是非常重要的。 总之,《Linux与Unix Shell编程指南》对于想要进一步学习Linux和Unix系统、提高Shell编程技能的读者来说,是一本非常有价值的技术书籍。 ### 回答2: Linux与Unix Shell编程指南是一本非常著名的书籍,主要介绍了Shell编程的基础知识和实际应用技巧。ShellLinux和Unix系统中的一种命令行解释器,也是一种编程语言,它可以通过脚本编写来自动化执行一些常用的任务。 本书的作者是Shih-Wei Yuan和Mark G. Sobell,共有25章,从介绍Shell的概念和历史开始,详细阐述Shell编程的语法、变量、流程控制、函数、调试等方面的知识。 其中,重点涵盖了Shell脚本的结构和用途,Shell中的字符串操作和正则表达式,Shell的内建命令和外部命令的使用,以及Shell如何处理变量和环境。 此外,该书还介绍了一些实际应用案例,例如Shell脚本编写的服务监控、日志分析和一些常用的工具应用等方面。这些例子丰富了读者的经验和实践能力。 总之,Linux与Unix Shell编程指南是一本深入浅出、通俗易懂的书籍,对Shell编程感兴趣的读者可以通过学习此书来快速上手,提高自己的工作效率。无论是在日常的运维管理、软件开发还是数据处理等方面,Shell都是一种非常强大的工具,能够为用户带来很多便利。 ### 回答3: Linux与Unix Shell编程指南是一本经典的编程入门书籍,通过简单易懂的方式介绍了Shell脚本语言的基础知识以及常用的编程技巧。本书内容涵盖Shell基本语法、变量、流程控制、函数、正则表达式等方面,深入浅出地带领读者进入Shell编程的世界。 Shell编程在Unix/Linux系统中有着极其重要的应用,通过编写Shell程序可以轻松地完成常规的文本文件处理、系统管理及自动化化脚本等任务,提高工作效率,减少人为错误。本书通过大量的实例演示Shell编程的各种应用场景,让读者感受到编程的乐趣。 构造复杂的Shell程序需要掌握逻辑和算法,本书深入理解了各种算法和数据结构,并详细解释了如何使用Shell进行实现。此以外,本书通过对Shell开发环境、调试工具以及面向对象编程等方面的阐述,让读者通过本书学习Shell开发的全过程,并顺利地实现编程目标。 总之,本书是一本适合初学者入门的Shell编程指南,也是一本深入学习Shell编程的经验分享之作。如果您是一名初学Shell编程的开发者或管理员,本书将是您不可错过的好书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

键盘歌唱家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值