linux笔记(八)之shell编程和ubantu软件下载

shell编程

shell是什么

在这里插入图片描述
应用程序调用shell,shell命令解释器驱动内核,内核操作硬件。

shell脚本的执行方式

1)脚本的格式
#!/bin/bash 告诉系统使用哪一种shell进行解析
2)脚本需要有可执行权限
实例
vim myshell.sh
i
!#/bin/bash
echo “hello world”
wq
方式一
chmod 744 myshell.sh 给所有者一个x权限
两种方式
相对路径./myshell.sh
绝对路径./root/shell/myshell.sh
方式二
不用赋予脚本x权限
sh ./myshell.sh 用sh解释器执行脚本
sh /root/shell/myshell.sh

shell变量

1)分为系统变量和用户自定义变量
2)系统变量 $HOME $PWD $SHELL $USER
3)显示系统中所有的变量 set

shell变量的定义

定义变量:变量=值
撤销变量: unset 变量
声明静态变量: readonly 变量 不能unset

案例1定义变量A
A=100
echo “A=$A”
案例2撤销变量A
unset
echo “A=$A”
案例3声明静态变量B=2,不能unset
readonly A=99 定义和使用静态变量
echo “A=$A”
unset A 不可以unset一个静态变量
echo “A=$A”

变量定义的规则

1)变量名称可以有字母数字下划线组成,不能以数字开头
2)等号两侧不能有空格

将命令的返回值给变量

1 A=`ls -la`反引号,运行里面的命令,并把结果返回变量A
RESULT=`ls -l /home`
echo $RESULT
2 A=$(ls -la)等价于反引号``
MYDATE= ( d a t e ) e c h o " d a t e = (date) echo "date= (date)echo"date=MYDATE"
在这里插入图片描述

设置环境变量

基本语法

export 变量名=变量值   设置环境变量
source 配置文件      让修改的配置信息立即生效
echo $环境变量      查询环境变量的值
示意图
/etc/profile 环境变量 $TOMCAT_HOME 脚本就可以引用
为了让/etc/profile的环境变量生效,需要使用指令source /etc/profile或者重启系统或者注销用户

实例

1在/etc/profile文件中定义TOMCAT_HOME环境变量
vim /etc/profile
#定义一个环境变量
TOMCAT_HOME=/opt/tomcat
export TOMCAT_HOME

2让修改的配置文件立即生效
source /etc/profile 让其生效
echo $TOMCAT_HOME 有值

:<<! xxxxxxxxx!多行注释
3在另外一个shell程序中使用TOMCAT_HOME
echo “tomcathome=$TOMCAT_HOME”

位置参数变量

介绍

当我们执行一个shell脚本时,希望获取到命令行的参数信息,使用未知参数变量,eg ./myshell.sh 100 300 这就是一个shell的命令行,可以在myshell脚本中获取到参数信息。

基本语法

$n   功能描述:0代表命令本身, 1-9一至第九个参数,10以上用{10}括起来
$*   功能描述:命令行中的所有参数,把所有参数看成一个整体
$@   功能描述:命令行中的所有参数 每个参数区分对待
$#    功能描述:命令行中参数的个数

案例

vim postionPara.sh
#!/bin/bash
#获取到各个参数
echo “$0 $1 $2”  显示./postionPara.sh 30 60
echo “$*”     显示30 60
echo “$@”     显示30 60
echo “参数个数=$#”  显示2

chmod 544 postionPara.sh
./postionPara.sh 30 60

预定义变量

介绍

事先已近定义好的变量,可以在shell中直接使用

基本语法

$$ 来获取当前的进程号PID
$! 后台运行的最后一个进程的进程号(PID)
$? 最后一个执行的命令的返回状态,0成功,非0,执行不正确

案例

vim preVar.sh
#!/bin/bash
echo “当前的进程号=$KaTeX parse error: Expected 'EOF', got '#' at position 3: " #̲以后台的方式运行shell.s…!”
echo “执行的值=$?”

chmod 744 preVar.sh
./preVar.sh

运算符

基本语法

1)$((运算式)) $[运算式]
2)expr m + n 运算符要有空格
3)expr m - n
4)expr\ *,/,% 乘 除 取余

案例1

vim demo.sh
#!/bin/bash
#第一种方式$((运算式))
RESULT1=$(((2+3)*4))
echo “result1=$RESULT1”

chmod 744 demo.sh
./demo.sh

#第二种方式$[运算式]
RESULT2=$[(2+3)*4]
echo “result2=$RESULT2”

#第三种方式expr
TEMP=`expr 2 + 3`
RESULT3=`expr  $TEMP \ *  4` 注意空格
echo “result3=$RESULT3”

案例2

请求出命令行的两个参数[整数]的和
#求出两个参数的和
SUM=$[$1+$2]
echo “SUM=$SUM”

条件判断

基本语法

[ condition ] 注意condition前后要有空格
非空返回true

常用判断条件

1两个整数的比较

=字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于

2按照文件权限进行判断

-r 有读权限 [-r 文件]
-w 有写权限
-x 有执行权限

3按照文件类型进行判断

-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录

应用实例1

“ok"是否等于"ok”
vim judge.sh
#!/bin/bash
if [  “ok” = “ok”  ]
then
echo “equal”
fi
chmod 744 judge.sh
./judge.sh

应用实例2

23是否大于等于22
if [  23 -gt 22  ]
then
echo “大于”
fi
案例三
/root/shell/aaa.txt目录中的文件是否存在
if [  -e  /root/shell/aaa.txt ]
then
echo “存在”
fi

流程控制

if 判断

基本语法

if [ 条件判断式 ];then
 程序
fi
或者
if [ 条件判断式 ]
  then
  程序
elif [ 条件判断式 ]
 then
   程序
fi  
注意:(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)第二种方式常用

案例

编写一个shell程序,如果输入的参数,大于等于60,则输出"及格了",如果小于60,则输出不及格。
vim teshif
#!/bin/bash
if [ $1 -ge 60 ]
then
echo “及格了”
elif [ $1 -lt 60 ]
then
echo “不及格”
fi

case 语句

基本语法

case $变量名 in
“值1”)
如果变量的值等于值1,则执行程序1
;;
“值2”)
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

案例

当命令行参数是1时,输出"周一",是2时,就输出“周二”,其他情况输出“other”
vim testcase.sh
#!/bin/bash
case $1 in
“1”)
echo “周一”
;;
“2”)
echo “周二”
;;
*)
echo “other”
;;
esac

for 循环语句

基本语法1

for 变量 in 值1 值2 值3
do
程序
done

应用案例

打印命令行输入的参数(使用 $* $@)
vim testfor.sh
#!/bin/bash
for i in “$*”
do
echo “the num is $i”
done
结果当做整体 the num is 10 20 30 当做一个整体输出
for j in “$@”
do
echo “the num is $j”
done
结果是 the num is 10
the num is 20
the num is 30
$@是分开处理

基本语法2

for ((初始值;循环控制条件;变量变化))
do
  程序
done

应用案例

从1加到100输出显示
SUM=0
for((i=1;i<=100;i++))
do
SUM=$(($SUM+$i))
done
echo “sum=$SUM”

while 循环

基本语法1

while [ 条件判断式 ]
do
 程序
done

应用案例

从命令行输入一个数n,统计从1+…+n的值是多少
vim testwhile.sh
#!/bin/bash
SUM=0
i=0
while [ $i -le $1]
do
SUM= [ [ [SUM+$i]
i= [ [ [i+1]
done
echo “sum=$SUM”

read 读取控制台的输入

基本语法

read [选项][参数]
-p:读指定的提示符
-t:读取值时等待的时间
参数 变量:指定取值的变量名

案例1

读取控制台的num 值
vim testRead.sh
#!/bin/bash
read -p “请输入一个数num1=”  NUM1 程序会阻塞在这里
echo “你输入的值时 num1=$NUM”

案例2

读取控制台输入一个num值,在10s内输入
read -t 10 -p “请输入一个数num2=”  NUM2 等待10s
echo “你输入的值时 num2=$NUM”

函数

系统函数

basename基本语法

返回完整路径的最后/部分,常用于获取文件名,如果suffix被指定basename会将pathname或string中的suffix去掉
basename[pathname][suffix]
basename[string][suffix]

案例

请返回/home/aaa/test.txt中test.txt部分
basename  /home/aaa/test.txt
直接拿到test.txt
basename /home/aaa/test.txt  .txt
返回test

dirname基本语法

返回完整路径最后/的前面的部分,从给定的绝对路径的文件名除去文件名,返回剩下的目录部分

案例

请返回/home/aaa/test.txt的/home/aaa
dirname  /home/aaa/test.txt
返回
/home/aaa

自定义函数

基本语法

[function] funname [()]
{
Action;
[return int;]
}
调用直接写函数名:funname[值]

案例1

计算输入的两个参数的和(read),getSum
vim testFun.sh
#!/bin/bash
function getSum(){
SUM=$[$1+$2]
echo “和是=$SUM”
}

read -p “n1” n1
read -p “n2” n2
调用getsum
getSum $n1 $n2

shell编程综合案例

1)每天凌晨2:10 备份数据库atguiguDB到/data/backup/db
2)备份开始和结束给出相应的提示信息
3)备份后的文件要求已备份时间为文件名,打包成.tar.gz的形式
4)检查10天前备份的数据库

编写一个shell脚本

思路分析

图
vim /usr/sbin/mysql_db_backup.sh
#!/bin/bash
#定义备份的路径
BACKUP=/data/backup/db
#获取当前时间做文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
echo “----------开始备份----------”
echo “-----备份的路径是$BACKUP/$DATETIME.tar.gz”

#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=xgh961120
#备份数据库名
DATABASE =atguigudb
#创建备份的路径
#如果备份的路径存在就使用,否则就创建
[ ! -d “$BACKUP/$DATETIME” ] && mkdir -p “$BACKUP/$DATETIME”
#执行mysql备份数据库的指令
mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | gzip >$BACKUP/$DATETIME/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz  $DATETIME
#删除临时文件
rm -rf $BACKUP/$DATETIME
#删除十天前的备份文件
find $BACKUP -mtime+10  -name “*.tar.gz” -exec rm -rf{}\; 删除找到的文件
echo “========备份文件成功”

交给crownd

crontab -e
编辑
10 2 * * * /usr/sbin/mysql_db_backup.sh

ubantu 软件管理操作的相关命令

在这里插入图片描述
sudo apt-get update package 更新源
sudo apt-get install package 安装包
sudo apt-get remove package 删除包
sudo apt-get source package 下载该包的源代码
ssh从一台linux连接到另一台linux
ssh 用户名@IP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值