Shell-day03
1. 昨日回顾
Shell变量赋值
Read的语法示例
read -p
read 示例脚本测试IP地址是否通畅
Read修改主机名脚本
Read修改IP地址脚本
Shell变量替换
${#变量}
${变量#匹配规则}
${变量##匹配规则}
${变量%匹配规则}
${变量%%匹配规则}
${变量/旧的字符串/新的字符串}
${变量//旧的字符串/新的字符串}
${变量:匹配规则:匹配规则}
变量替换案例:监控内存的使用率
变量替换案例:备份场景案例
4. 在/backup下创建10个.txt的文件,提前创建好,找到/backup目录下所有后缀名为.txt的文件
1)批量修改txt为txt.bak
2)把所有的.bak文件打包压缩为123.tar.gz
3)批量还原文件的名字,及把增加的.bak再删除
5. 取出下列字符串长度小于3的单词,I am qiuzengjia teacher I am 18。
2. 根据下方提示完成脚本
在/backup下创建10个.txt的文件,提前创建好,找到/backup目录下所有后缀名为.txt的文件
[root@shell /service/scripts/day03]
/backup/file-1.txt
/backup/file-2.txt
/backup/file-3.txt
/backup/file-4.txt
/backup/file-5.txt
/backup/file-6.txt
/backup/file-7.txt
/backup/file-8.txt
/backup/file-9.txt
/backup/file-10.txt
1)批量修改txt为txt.bak
2)把所有的.bak文件打包压缩为123.tar.gz
3)批量还原文件的名字,及把增加的.bak再删除
[root@shell /service/scripts/day03]
find /backup/ -name "*.txt" | sed -r 's#(.*)#mv \1 \1.bak#g' | bash &>/dev/null
if [ $? -eq 0 ];then
echo "所有以.txt为结尾的文件重命名成功...."
else
echo "所有以.txt为结尾的文件重命名失败...."
exit
fi
tar czPf /backup/123.tar.gz $(find /backup/ -name "*.bak" ) &>/dev/null
if [ $? -eq 0 ];then
echo "所有以.bak为结尾的文件打包压缩成功...."
else
echo "所有以.bak为结尾的文件打包压缩失败...."
exit
fi
find /backup/ -name "*.bak" | sed -r 's#(.*)(\.bak)#mv \1\2 \1#g' | bash &>/dev/null
if [ $? -eq 0 ];then
echo "文件名称还原成功...."
else
echo "文件名称失败...."
exit
fi
echo "脚本执行成功!过程没有报错!"
[root@shell /service/scripts/day03]
所有以.txt为结尾的文件重命名成功....
所有以.bak为结尾的文件打包压缩成功....
文件名称还原成功....
脚本执行成功!过程没有报错!
[root@shell /service/scripts/day03]
-rw-r--r-- 1 root root 0 2020-04-22 08:50 /backup/file-10.txt
-rw-r--r-- 1 root root 0 2020-04-22 08:50 /backup/file-1.txt
-rw-r--r-- 1 root root 0 2020-04-22 08:50 /backup/file-2.txt
-rw-r--r-- 1 root root 0 2020-04-22 08:50 /backup/file-3.txt
-rw-r--r-- 1 root root 0 2020-04-22 08:50 /backup/file-4.txt
-rw-r--r-- 1 root root 0 2020-04-22 08:50 /backup/file-5.txt
-rw-r--r-- 1 root root 0 2020-04-22 08:50 /backup/file-6.txt
-rw-r--r-- 1 root root 0 2020-04-22 08:50 /backup/file-7.txt
-rw-r--r-- 1 root root 0 2020-04-22 08:50 /backup/file-8.txt
-rw-r--r-- 1 root root 0 2020-04-22 08:50 /backup/file-9.txt
[root@shell /service/scripts/day03]
-rw-r--r-- 1 root root 209 2020-04-22 09:10 /backup/123.tar.gz
[root@shell /service/scripts/day03]
tar: Removing leading `/' from member names
/backup/file-1.txt.bak
/backup/file-2.txt.bak
/backup/file-3.txt.bak
/backup/file-4.txt.bak
/backup/file-5.txt.bak
/backup/file-6.txt.bak
/backup/file-7.txt.bak
/backup/file-8.txt.bak
/backup/file-9.txt.bak
/backup/file-10.txt.bak
awk
for循环加mv命令
[root@shell /service/scripts/day03]# cat for.sh
#!/bin/bash
#批量修改txt为txt.bak
for i in $(find /backup/ -name "*.txt")
do
mv $i ${i}.bak
done
if [ $? -eq 0 ];then
echo "所有以.txt为结尾的文件重命名成功...."
else
echo "所有以.txt为结尾的文件重命名失败...."
exit
fi
#把所有的.bak文件打包压缩为123.tar.gz
tar czPf /backup/123.tar.gz $(find /backup/ -name "*.bak") &>/dev/null 打包使用-p参数不会出现删根提示
if [ $? -eq 0 ];then
echo "所有以.bak为结尾的文件打包压缩成功...."
else
echo "所有以.bak为结尾的文件打包压缩失败...."
exit
fi
#还原名称
for n in $(find /backup/ -name "*.bak")
do
mv $n ${n%.*}
done
if [ $? -eq 0 ];then
echo "文件名称还原成功...."
else
echo "文件名称失败...."
exit
fi
#输出脚本是否执行成功
echo "脚本执行成功!过程没有报错!"
[root@shell /service/scripts/day03]# sh for.sh
所有以.txt为结尾的文件重命名成功....
所有以.bak为结尾的文件打包压缩成功....
文件名称还原成功....
脚本执行成功!过程没有报错!
3. 判断字符串长度
取出下列字符串长度小于3的单词,I am qiuzengjia teacher I am 18。
[root@shell /service/scripts/day03]
I
am
I
am
18
[root@shell /service/scripts/day03]
for i in I am qiuzengjia teacher I am 18
do
if [ ${#i} -lt 3 ];then
echo $i
fi
done
[root@shell /service/scripts/day03]
I
am
I
am
18
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
for i in I am qiuzengjia teacher I am 18
do
if [ ${#i} -gt 3 ];then
echo $i
fi
done
[root@shell /service/scripts/day03]
qiuzengjia
teacher
[root@shell /service/scripts/day03]
for i in I am qiuzengjia teacher I am 18
do
length=$(echo $i | wc -L)
if [ $length -lt 3 ];then
echo $i
fi
done
[root@shell /service/scripts/day03]
I
am
I
am
18
4. Shell的变量运算
加减乘除 求余 求方
Num1 + Num2
-
*
/
%
^
5. 整数运算
expr $(()) $[] let 不支持小数运算
expr 有语法格式 两数和操作符之间必须要有空格,当第一个数为空值时,计算不会报错,当最后一个为空值时会报错
不能进行求方运算,乘的操作符需要转义
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
25
[root@shell /service/scripts/day03]
expr : syntax error
[root@shell /service/scripts/day03]
expr : syntax error
[root@shell /service/scripts/day03]
5
[root@shell /service/scripts/day03]
15
[root@shell /service/scripts/day03]
expr : syntax error
[root@shell /service/scripts/day03]
100
[root@shell /service/scripts/day03]
4
[root@shell /service/scripts/day03]
0
[root@shell /service/scripts/day03]
expr : syntax error
$(()) 没有严格的语法说明,不能求方 当第一个数为空值时,计算不会报错,当最后一个为空值时会报错
[root@shell /service/scripts/day03]
25
[root@shell /service/scripts/day03]
15
[root@shell /service/scripts/day03]
100
[root@shell /service/scripts/day03]
4
[root@shell /service/scripts/day03]
0
[root@shell /service/scripts/day03]
17
[root@shell /service/scripts/day03]
-bash: 20+: syntax error: operand expected (error token is "+" )
[root@shell /service/scripts/day03]
5
$[] 没有严格的语法说明,不能求方 当第一个数为空值时,计算不会报错,当最后一个为空值时会报错
[root@shell /service/scripts/day03]
25
[root@shell /service/scripts/day03]
15
[root@shell /service/scripts/day03]
100
[root@shell /service/scripts/day03]
4
[root@shell /service/scripts/day03]
0
[root@shell /service/scripts/day03]
17
[root@shell /service/scripts/day03]
5
[root@shell /service/scripts/day03]
-bash: 20+: syntax error: operand expected (error token is "+" )
let 计数
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
25
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
4
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
2
6. 小数运算
awk bc Python
bc 命令 可以求方运算
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
20+10
30
$Num1+$Num2
(standard_in) 2: illegal character: $
(standard_in) 2: illegal character: N
(standard_in) 2: illegal character: $
(standard_in) 2: illegal character: N
20/3 #这样计算小数时错误的
6
^C
(interrupt) Exiting bc.
#bc 计算时变量和计算符号之间无需加空格
[root@shell /service/scripts/day03]# echo $Num1+$Num2 | bc
25
[root@shell /service/scripts/day03]# echo $Num1-$Num2 | bc
15
[root@shell /service/scripts/day03]# echo $Num1*$Num2 | bc
100
[root@shell /service/scripts/day03]# echo $Num1/$Num2 | bc
4
[root@shell /service/scripts/day03]# Num2=6
[root@shell /service/scripts/day03]# echo $Num1/$Num2 | bc
3
[root@shell /service/scripts/day03]# echo "scale=2;$Num1/$Num2" | bc #求小数要加上 scale scale=2 表示保留2位小数。
3.33
[root@shell /service/scripts/day03]# echo "scale=1;$Num1/$Num2" | bc
3.3
[root@shell /service/scripts/day03]# echo "scale=10;$Num1/$Num2" | bc
3.3333333333
[root@shell /service/scripts/day03]# echo $Num1%$Num2 | bc
2
[root@shell /service/scripts/day03]# echo $Num1^$Num2 | bc #可以求方运算
64000000
awk
[root@shell /service/scripts/day03]# awk ' BEGIN{print 20+6}'
26
[root@shell /service/scripts/day03]# awk ' BEGIN{print 20-6}'
14
[root@shell /service/scripts/day03]# awk ' BEGIN{print 20*6}'
120
[root@shell /service/scripts/day03]# awk ' BEGIN{print 20/6}'
3.33333
[root@shell /service/scripts/day03]# awk ' BEGIN{print 20^6}'
64000000
[root@shell /service/scripts/day03]# awk ' BEGIN{print 20%6}'
2
[root@shell /service/scripts/day03]# awk ' BEGIN{print $Num1 +$Num2 }' #注意awk在计算变量时使用双引号否者无法解析变量
0
[root@shell /service/scripts/day03]# awk "BEGIN{print $Num1+$Num2}"
26
[root@shell /service/scripts/day03]# awk -vnum1=10 -vnum2=5 ' BEGIN{print num1+num2}' #使用-v设置awk内置变量
15
[root@shell /service/scripts/day03]# awk ' BEGIN{print 20/6}'
3.33333
[root@shell /service/scripts/day03]# awk ' BEGIN{print 20/7}'
2.85714
[root@shell /service/scripts/day03]# awk ' BEGIN{print 20/30}'
0.666667
[root@shell /service/scripts/day03]# awk ' BEGIN{print 1/2}'
0.5
[root@shell /service/scripts/day03]# awk ' BEGIN{printf "%.2f\n" ,1/2}'
0.50
[root@shell /service/scripts/day03]# awk ' BEGIN{printf "%.2f\n" ,10/3}' 这里的2表示小数点位数 n表示换行,注意使用双引号引起,单引号会报语法错误。
3.33
python
[root@shell /service/scripts/day03]# python #交互式运算
Python 2.7.5 (default, Oct 30 2018, 23:45:53)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 20+10
30
>>> 20/6
3
>>> 20.0/6
3.3333333333333335
>>>
KeyboardInterrupt
>>> quit()
[root@shell /service/scripts/day03]# echo "print $Num1+$Num2" |python
26
[root@shell /service/scripts/day03]# echo "print $Num1-$Num2" |python
14
[root@shell /service/scripts/day03]# echo "print $Num1*$Num2" |python
120
[root@shell /service/scripts/day03]# echo "print $Num1/$Num2" |python
3
[root@shell /service/scripts/day03]# echo "print ${Num1}.0/$Num2" |python #计算小数时要加.0
3.33333333333
[root@shell /service/scripts/day03]# echo "print ${Num1}^$Num2" |python
18
7. 变量运算案例
[root@shell /service/scripts/day03]
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 125712 2080 ? Ss Apr20 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S Apr20 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Apr20 0:01 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< Apr20 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S Apr20 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S Apr20 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R Apr20 0:01 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< Apr20 0:00 [lru-add-drain]
root 11 0.0 0.0 0 0 ? S Apr20 0:00 [watchdog/0]
root 13 0.0 0.0 0 0 ? S Apr20 0:00 [kdevtmpfs]
第一种方法
[root@shell /service/scripts/day03]
4681212
[root@shell /service/scripts/day03]
4672524
[root@shell /service/scripts/day03]
4.56435MB
第二种方法:
[root@shell /service/scripts/day03]
4353420
编写一个简单的计算器
要求:
执行脚本:
请输入第一个数字:20
请输入第二个数字:10
20 + 10 = 30
20 - 10 = 10
20 * 10 = 200
20 / 10 = 2
[root@shell /service/scripts/day03]
read -p "请输入第一个你要运算的数字:" Num1
read -p "请输入第二个你要运算的数字:" Num2
echo "$Num1 和 $Num2 两个数字的加减乘除运算结果如下:"
echo "$Num1 + $Num2 = $(($Num1+$Num2) )"
echo "$Num1 - $Num2 = $(($Num1-$Num2) )"
echo "$Num1 * $Num2 = $(($Num1*$Num2) )"
echo "$Num1 / $Num2 = $(($Num1/$Num2) )"
[root@shell /service/scripts/day03]
请输入第一个你要运算的数字:10
请输入第二个你要运算的数字:10
10 和 10 两个数字的加减乘除运算结果如下:
10 + 10 = 20
10 - 10 = 0
10 * 10 = 100
10 / 10 = 1
[root@shell /service/scripts/day03]
read -p "请输入第一个你要运算的数字:" Num1
read -p "请输入第二个你要运算的数字:" Num2
echo "$Num1 和 $Num2 两个数字的加减乘除运算结果如下:"
echo "$Num1 + $Num2 = $(($Num1+$Num2) )"
echo "$Num1 - $Num2 = $(($Num1-$Num2) )"
echo "$Num1 * $Num2 = $(($Num1*$Num2) )"
echo "$Num1 / $Num2 = $(awk "BEGIN{print $Num1 /$Num2 }" ) "
[root@shell /service/scripts/day03]
请输入第一个你要运算的数字:10
请输入第二个你要运算的数字:20
10 和 20 两个数字的加减乘除运算结果如下:
10 + 20 = 30
10 - 20 = -10
10 * 20 = 200
10 / 20 = 0.5
[root@shell /service/scripts/day03]
read -p "请输入第一个你要运算的数字:" Num1
expr 1 + $Num1 &>/dev/null
if [ $? -eq 0 ];then
echo "你输入的第一个值满足运算条件"
else
echo "你输入的第一个值不满足条件,请重新输入!"
exit
fi
read -p "请输入第二个你要运算的数字:" Num2
expr 1 + $Num2 &>/dev/null
if [ $? -eq 0 ];then
echo "你输入的第二个值满足运算条件"
else
echo "你输入的第二个值不满足条件,请重新输入!"
exit
fi
echo "$Num1 和 $Num2 两个数字的加减乘除运算结果如下:"
echo "$Num1 + $Num2 = $(($Num1+$Num2) )"
echo "$Num1 - $Num2 = $(($Num1-$Num2) )"
echo "$Num1 * $Num2 = $(($Num1*$Num2) )"
echo "$Num1 / $Num2 = $(awk "BEGIN{print $Num1 /$Num2 }" ) "
[root@shell /service/scripts/day03]
请输入第一个你要运算的数字:a
你输入的第一个值不满足条件,请重新输入!
[root@shell /service/scripts/day03]
请输入第一个你要运算的数字:0.5
你输入的第一个值不满足条件,请重新输入!
[root@shell /service/scripts/day03]
请输入第一个你要运算的数字:1
你输入的第一个值满足运算条件
请输入第二个你要运算的数字:a
你输入的第二个值不满足条件,请重新输入!
[root@shell /service/scripts/day03]
请输入第一个你要运算的数字:1
你输入的第一个值满足运算条件
请输入第二个你要运算的数字:1
你输入的第二个值满足运算条件
1 和 1 两个数字的加减乘除运算结果如下:
1 + 1 = 2
1 - 1 = 0
1 * 1 = 1
1 / 1 = 1
8. Shell的变量案例
01. 使用Shell脚本打印,系统版本、内核版本平台、虚拟平台、静态主机名、eth0网卡IP地址、lo网卡IP地址、当前主机的外网IP地址curl icanhazip.com
i
[root@shell /service/scripts/day03]
System_Version=$(awk -F '[ .]' '{print $1,$4"."$5}' /etc/redhat-release)
Kernel_Version=$(uname -r | cut -c 1-10)
Virtualization=$(hostnamectl | awk '/Virtualization/{print $2}' )
Static_Hostname=$(hostnamectl | awk '/Static/{print $3}' )
Eth0=$(ifconfig eth0 | awk 'NR==2{print $2}' )
Lo=$(ifconfig lo | awk 'NR==2{print $2} ' )
Wan=$(curl -s ifconfig.me)
echo "当前系统的版本为:$System_Version "
echo "当前系统的内核版本为:$Kernel_Version "
echo "当前系统虚拟化平台为:$Virtualization "
echo "当前系统静态主机名为:$Static_Hostname "
echo "系统的Eth0网卡IP地址为:$Eth0 "
echo "系统的Lo网卡IP地址为:$Lo "
echo "当前系统的外网IP地址:$Wan "
[root@shell /service/scripts/day03]
当前系统的版本为:CentOS 7.6
当前系统的内核版本为:3.10.0-957
当前系统虚拟化平台为:vmware
当前系统静态主机名为:shell
系统的Eth0网卡IP地址为:10.0.0.81
系统的Lo网卡IP地址为:127.0.0.1
当前系统的外网IP地址:183.192.140.109
02. 需求描述:变量string="Bigdata process is Hadoop, Hadoop is open source project" ,执行脚本后,打印输出string变量,并给出用户以下选项:
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
用户请输入数字1|2|3|4,可以执行对应项的功能。
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
String="Bigdata process is Hadoop, Hadoop is open source project"
echo $String
cat <<EOF
#############################
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
#############################
EOF
read -p "请输入数字1|2|3|4,可以执行对应选项的功能:" Num
expr 1 + $Num &>/dev/null
if [ $? -ne 0 ];then
echo "你输入的不是一个数字!请重新输入!"
exit
fi
if [ $Num -eq 1 ];then
echo "变量String的长度为:${#String} "
exit
fi
if [ $Num -eq 2 ];then
echo "删除字符串中所有的Hadoop,结果如下:"
echo "${String//Hadoop/} "
exit
fi
if [ $Num -eq 3 ];then
echo "替换第一个Hadoop为Linux,结果如下:"
echo "${String/Hadoop/Linux} "
exit
fi
if [ $Num -eq 4 ];then
echo "替换全部Hadoop为Linux"
echo "${String//Hadoop/Linux} "
else
echo "你输入的数字不符合要求!请输入数字1|2|3|4"
fi
[root@shell /service/scripts/day03]
Bigdata process is Hadoop, Hadoop is open source project
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
请输入数字1|2|3|4,可以执行对应选项的功能:a
你输入的不是一个数字!请重新输入!
[root@shell /service/scripts/day03]
Bigdata process is Hadoop, Hadoop is open source project
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
请输入数字1|2|3|4,可以执行对应选项的功能:5
你输入的数字不符合要求!请输入数字1|2|3|4
[root@shell /service/scripts/day03]
Bigdata process is Hadoop, Hadoop is open source project
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
请输入数字1|2|3|4,可以执行对应选项的功能:1
变量String的长度为:56
[root@shell /service/scripts/day03]
Bigdata process is Hadoop, Hadoop is open source project
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
请输入数字1|2|3|4,可以执行对应选项的功能:2
删除字符串中所有的Hadoop,结果如下:
Bigdata process is , is open source project
[root@shell /service/scripts/day03]
Bigdata process is Hadoop, Hadoop is open source project
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
请输入数字1|2|3|4,可以执行对应选项的功能:3
替换第一个Hadoop为Linux,结果如下:
Bigdata process is Linux, Hadoop is open source project
[root@shell /service/scripts/day03]
Bigdata process is Hadoop, Hadoop is open source project
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
请输入数字1|2|3|4,可以执行对应选项的功能:4
替换全部Hadoop为Linux
Bigdata process is Linux, Linux is open source project
9. 流程控制语句if概述
1. 单分支
if [ 如果你有房 ];then 如果 条件 则
就嫁给你
fi
[root@shell /service/scripts/day03]
if [ 1 -lt 2 ];then
echo "1 < 2"
fi
[root@shell /service/scripts/day03]
1 < 2
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
if ls /root &>/dev/null;then
echo "root目录存在"
fi
[root@shell /service/scripts/day03]
root目录存在
2. 双分支
if [ 如果你有房 ];then 如果 条件 则 否则
嫁给你
else
拜拜
fi
[root@shell /service/scripts/day03]
if ls /root &>/dev/null;then
echo "root目录存在"
else
echo "root目录不存在"
fi
[root@shell /service/scripts/day03]
root目录存在
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
root目录不存在
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
if [ 1 -lt 2 ];then
echo "1 < 2"
else
echo "1 > 2"
fi
[root@shell /service/scripts/day03]
1 < 2
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
if [ 3 -lt 2 ];then
echo "1 < 2"
else
echo "1 > 2"
fi
[root@shell /service/scripts/day03]
1 > 2
3. 多分支
if [ 如果你有房 ];then 如果 条件 则 或者 条件 则 ... 否则
嫁给你
elif [ 你有钱 ];then
嫁给你
elif [ 你长的帅 ];then
尝试交往
elif [ 你在老男孩学习Linux ];then
倒贴也跟你
else
真的拜拜
fi
判断一个用户是否存在该系统
[root@shell /service/scripts/day03]
read -p "请输入你要查询的用户:" User
if id $User &>/dev/null;then
echo "用户${User} 存在该系统!"
if ls -d /home/$User &>/dev/null;then
echo "用户也存在家目录!"
exit
else
echo "用户不存在家目录!"
exit
fi
elif ls -d /home/$User &>/dev/null;then
echo "用户不存在该系统!但是用户存在家目录!"
else
echo "用户不存在该系统!也不存在家目录!"
fi
[root@shell /service/scripts/day03]
请输入你要查询的用户:test02
用户test02存在该系统!
用户不存在家目录!
[root@shell /service/scripts/day03]
请输入你要查询的用户:test01
用户test01存在该系统!
用户也存在家目录!
[root@shell /service/scripts/day03]
请输入你要查询的用户:test03
用户不存在该系统!但是用户存在家目录!
[root@shell /service/scripts/day03]
请输入你要查询的用户:test04
用户不存在该系统!也不存在家目录!
[root@shell /service/scripts/day03]
String="Bigdata process is Hadoop, Hadoop is open source project"
echo $String
cat <<EOF
#############################
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
#############################
EOF
read -p "请输入数字1|2|3|4,可以执行对应选项的功能:" Num
expr 1 + $Num &>/dev/null
if [ $? -ne 0 ];then
echo "你输入的不是一个数字!请重新输入!"
exit
fi
if [ $Num -eq 1 ];then
echo "变量String的长度为:${#String} "
exit
elif [ $Num -eq 2 ];then
echo "删除字符串中所有的Hadoop,结果如下:"
echo "${String//Hadoop/} "
exit
elif [ $Num -eq 3 ];then
echo "替换第一个Hadoop为Linux,结果如下:"
echo "${String/Hadoop/Linux} "
exit
elif [ $Num -eq 4 ];then
echo "替换全部Hadoop为Linux"
echo "${String//Hadoop/Linux} "
else
echo "你输入的数字不符合要求!请输入数字1|2|3|4"
fi
[root@shell /service/scripts/day03]
Bigdata process is Hadoop, Hadoop is open source project
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
请输入数字1|2|3|4,可以执行对应选项的功能:1
变量String的长度为:56
[root@shell /service/scripts/day03]
Bigdata process is Hadoop, Hadoop is open source project
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
请输入数字1|2|3|4,可以执行对应选项的功能:2
删除字符串中所有的Hadoop,结果如下:
Bigdata process is , is open source project
[root@shell /service/scripts/day03]
Bigdata process is Hadoop, Hadoop is open source project
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
请输入数字1|2|3|4,可以执行对应选项的功能:3
替换第一个Hadoop为Linux,结果如下:
Bigdata process is Linux, Hadoop is open source project
[root@shell /service/scripts/day03]
Bigdata process is Hadoop, Hadoop is open source project
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
请输入数字1|2|3|4,可以执行对应选项的功能:4
替换全部Hadoop为Linux
Bigdata process is Linux, Linux is open source project
[root@shell /service/scripts/day03]
Bigdata process is Hadoop, Hadoop is open source project
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
请输入数字1|2|3|4,可以执行对应选项的功能:5
你输入的数字不符合要求!请输入数字1|2|3|4
[root@shell /service/scripts/day03]
Bigdata process is Hadoop, Hadoop is open source project
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
请输入数字1|2|3|4,可以执行对应选项的功能:a
你输入的不是一个数字!请重新输入!
10. 流程控制语句文件比较
-e
-s
-f
-d
-r
-w
-x
[root@shell /service/scripts/day03]
OK
[root@shell /service/scripts/day03]
ERROR
[root@shell /service/scripts/day03]
OK
[root@shell /service/scripts/day03]
ERROR
[root@shell /service/scripts/day03]
ERROR
[root@shell /service/scripts/day03]
OK
[root@shell /service/scripts/day03]
ERROR
[root@shell /service/scripts/day03]
OK
[root@shell /service/scripts/day03]
ERROR
[root@shell /service/scripts/day03]
OK
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
ERROR
[root@shell /service/scripts/day03]
OK
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
OK
[root@shell /service/scripts/day03]
-rw-r--r--. 1 root root 158 2013-06-07 22:31 /etc/hosts
[root@shell /service/scripts/day03]
OK
[root@shell /service/scripts/day03]
OK
[root@shell /service/scripts/day03]
ERROR
[root@shell /service/scripts/day03]
if [ -f $1 ];then
echo "$1 文件存在"
else
echo "$1 文件不存在"
fi
[root@shell /service/scripts/day03]
/etc/hosts 文件存在
[root@shell /service/scripts/day03]
/etc/host 文件不存在
11. 数据库备份案例
[root@shell /service/scripts/day03]
1. 针对库进行备份 提示用户输入要备份的数据库
2. 判断数据库是否存在
3. 根据用户输入的数据库进行备份 mysqldump
4. 备份的名称 日期 2020-04-22_DBname.sql
5. 备份到哪里 /backup/mysql
6. 显示备份结果
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
[root@shell /service/scripts/day03]
-rw-r--r-- 1 root root 244162 2020-04-22 15:55 test.sql
[root@shell /service/scripts/day03]
Back_Dir=/backup/mysql
Date=$(date +%F)
M_User=root
M_Pass=qls.123
[ -d $Back_Dir ] || mkdir -p $Back_Dir
read -p "请输入你要备份的数据库:" Db_Name
mysql -u$M_User -p$M_Pass -e "use $Db_Name ;" &>/dev/null
if [ $? -eq 0 ];then
echo "数据库${Db_Name} 存在,正在备份数据库....."
else
echo "数据库${Db_Name} 不存在!请检查你是否输入有误!"
exit
fi
mysqldump -u$M_User -p$M_Pass --single-transaction -R -B $Db_Name > $Back_Dir /${Date} _${Db_Name} .sql
if [ $? -eq 0 ];then
echo "数据库${Db_Name} 备份成功...."
else
echo "数据库${Db_Name} 备份失败...."
fi
[root@shell /service/scripts/day03]
请输入你要备份的数据库:qls
数据库qls不存在!请检查你是否输入有误!
[root@shell /service/scripts/day03]
请输入你要备份的数据库:123
数据库123不存在!请检查你是否输入有误!
[root@shell /service/scripts/day03]
请输入你要备份的数据库:world
数据库world存在,正在备份数据库.....
数据库world备份成功....
[root@shell /service/scripts/day03]
请输入你要备份的数据库:wordpress
数据库wordpress存在,正在备份数据库.....
数据库wordpress备份成功....
[root@shell /service/scripts/day03]
total 692
-rw-r--r-- 1 root root 462582 2020-04-22 16:12 2020-04-22_wordpress.sql
-rw-r--r-- 1 root root 244210 2020-04-22 16:12 2020-04-22_world.sql
[root@shell /service/scripts/day03]
Back_Dir=/backup/mysql
Date=$(date +%F)
[ -d $Back_Dir ] || mkdir -p $Back_Dir
read -p "请输入你要备份数据库的用户:" M_User
read -s -p "请输入你要备份数据库的用户的密码:" M_Pass
echo
read -p "请输入你要备份的数据库:" Db_Name
mysql -u$M_User -p$M_Pass -e "use $Db_Name ;" &>/dev/null
if [ $? -eq 0 ];then
echo "数据库${Db_Name} 存在,正在备份数据库....."
else
echo "数据库${Db_Name} 不存在!请检查你是否输入有误!"
exit
fi
mysqldump -u$M_User -p$M_Pass --single-transaction -R -B $Db_Name > $Back_Dir /${Date} _${Db_Name} .sql
if [ $? -eq 0 ];then
echo "数据库${Db_Name} 备份成功...."
else
echo "数据库${Db_Name} 备份失败...."
fi
[root@shell /service/scripts/day03]
请输入你要备份数据库的用户:root
请输入你要备份数据库的用户的密码:
请输入你要备份的数据库:test
数据库test 存在,正在备份数据库.....
数据库test 备份成功....
[root@shell /service/scripts/day03]
total 696
-rw-r--r-- 1 root root 1447 2020-04-22 16:19 2020-04-22_test.sql
-rw-r--r-- 1 root root 462582 2020-04-22 16:12 2020-04-22_wordpress.sql
-rw-r--r-- 1 root root 244210 2020-04-22 16:12 2020-04-22_world.sql
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现