Linux04——Shell篇

Linux04——Shell篇

一、定义

  • Shell是一个命令行解释器,通过用户输入的命令经过shell向Linux内核发送情况以便运行程序。

二、规范

  1. 脚本以#!/bin/bash开头
  2. 脚本需要有可执行权限

1. 编写

  1. vim hello.sh

  2. #!/bin/bash
    echo "hello,World!"
    

2. 执行

2.1 方式一:赋予脚本执行权限
1. 添加权限
chmod u+x hello.sh
2.2 方式二:不用赋予脚本执行权限
sh hello.sh    

三、变量

1. Shell变量的介绍

  1. Linux Shell 中的变量分为,系统变量和用户自定义变量。
  2. 系统变量: H O M E 、 S P W D 、 HOME、SPWD、 HOMESPWDSHELL、SUSER等等,比如:echo $HOME等等
  3. 显示当前shell 中所有变量:set

2. Shell变量的定义

语法说明
变量名=值定义变量
unset 变量撤销变量
readonly 变量声明静态变量
规则
	1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(×)
	2. 等号两侧不能有空格
	3. 变量名称一般习惯为大写,这是一个规范,我们遵守即可
#!/bin/bash
#案例1:输出变量
A=100
echo $A
echo A=$A
echo "A=$A"
//100
//A=100
//A=100
#案例2:撤销变量A
unset A
echo A=$A
//A=
#案例3:声明静态的变量B=2,不能unset
readonly B=2
echo B=$B
//B=2
#案例4:将指令返回的结果赋给变量
C=`date`
D=${date}
echo C=$C
echo D=$D
//C=2020年11月09日星期一21:20:10 cST
//D=2020年11月09日星期一21:20: 1e cST

3. 设置环境变量

3.1 基本语法
语法说明
export 变量名=变量值将shell变量输出为环境变量/全局变量
source配置文件让修改后的配置信息立即生效
echo $变量名查询环境变量的值
1. vim /etc/profile
2. #编辑export mytomcat=/opt/tomcat
3. #退出编辑模式
4. source /etc/profile
5. echo $mytomcat

4. Shell脚本的多行注释

:<<!
内容
!

5. 位置参数

  • 最好加上引号
语法说明
$n功能描述:n为数字,so代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如S{10}
S*功能描述:这个变量代表命令行中所有的参数,S*把所有的参数看成一个整体
S@功能描述:这个变量也代表命令行中所有的参数,不过S@把每个参数区分对待
$#功能描述:这个变量代表命令行中所有参数的个数
$$功能描述:当前进程的进程号(PID)
$!功能描述:后台运行的最后一个进程的进程号(PID)
echo 0=$0 1=$1 2=$2
echo 所有的参数=$*
echo $@
echo 参数的个数=$#
echo "当前进程号:$$"
echo /home/my.sh &
echo 进程ID:$!
echo "执行的结果是:$?"

image-20210811165131628

四、运算符

运算符说明
$((运算式)) /$[运算式]/书写表达式,
\*代表*
expr m + n书写表达式:必须中间有空格
#!/bin/bash
#案例1:计算(2+3)*4的值
	#方式1
		res1=$[(2+3)*4]
		echo 第一种=$res1
	#方式二
		res2=$(((2+3)*4))
		echo 第二种=$res2
	#方式三
        res3=`expr 2 + 3`
        res4=`expr $res 3 \* 4`
		echo  第三种=$res4
#案例2:求出命令行的两个参数的和
    sum1=$[$1+$2]
    echo sum=$sum1

五、条件判断&流程控制

1. if

1.1 语法
if [ condition ]
then 
		echo 返回内容
fi	

//注意:condition内容为空返回false,反之true

常用判断条件说明
=字符串比较
-lt小于
-le小于等于
-eq等于
-gt大于
-ge大于等于
-ne不等于
常用文件权限条件说明
-r有读的去权限
-w有写的权限
-x有执行的权限
查用文件类型条件说明
-f文件存在并且是一个常规的文件
-e文件存在
-d文件存在并是一个目录
1.2 案例
if [ "ok"="ok" ]
then
	echo "对的"
fi

#案例2:23是否大于等于22
if [ 23 -ge 23 ]
then
	echo "是的"
fi
#/home/aaa.txt目录下的文件是否存在
if [ -f /home/aaa.txt ]
then
	echo "存在"
fi

2. case

2.1 语法
case $变量名 in
"值1"
程序1    //解释:如果变量的值等于值1,就执行程序1
;;
"值2"
程序2    //解释:如果变量的值等于值1,就执行程序2
;;
....
*)		//解释:如果变量的值都不是以上的值,就执行此程序
esac
2.2 案例
#/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "其他"
;;
esac

3. for循环

3.1 基本语法
#语法1
for i in  数值类型
do
	程序代码
done
#语法2
for((i=1;i<=数值类型;i++))
do
	程序代码
done
3.2 案例
#语法1案例:把传递的参数打印出来
for i in  "$*"
do
	echo $i
done
#语法2案例:给定参数完成指定循环
#/bin/bash
sum=0
for((i=1;i<=$1;i++))
do
	sum=$[$sum+$i]
done
echo $sum

4. while循环

4.1 语法
while [ 条件判断式 ]
do
	程序代码
done
4.2 案例
#/bin/bash
sum=0
i=0
while [ $i -le $1 ]
do
	sum=$[$sum+$i]
	i=$[$i+1]
done
echo "执行的结果:$sum" 

六、read读取控制台输入

1. 语法

read [选项] [参数]

2. 选项

选项说明
-p指定读取值时的提示符
-t指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了

3. 案例

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

七、函数

1. 系统函数

函数语法说明
basenamebasename [pathname] [suffix]basename命令会删除所有的前缀包括最后一个(’/’)字符,然后将字符串显示出来。也就是显示文件名
dirnamedirname [pathname]返回完整路径最后’/'前面的部分,也就是路径部分

2. 自定义函数

2.1 语法
function 函数名(){
	函数体
}
//调用
函数名 [值/参数]
2.2 案例
#/bin/bash
#案例1:计算输入两个参数的和(动态获取),函数名:getSum
function getSum(){
	sum=$[$n1+$n2]
	echo "$n1+$n2="$sum
}	
read -p "请输入第一个参数n1=" n1
read -p "请输入第二个参数n2=" n2
getSum $n1 $n2
#备份目录
BACKUP=/data/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME
#数据库的地址
HOST=localhost
#数据库用户名
DB_USER=root
$数据库密码
DB_PW=jerry_crj
$备份的数据库名
DATABASE=mybase
#创建备份目录,如果不存在,就创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
#备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATATIME}/$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} 成功!"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值