当前位置: 首页 > news >正文

Linux入门DAY29

Linux入门DAY29

if 条件语句

语法

if <条件表达式>;then指令
fi

if单分支

if判断sshd是否运行,未运行则启动服务,启动则返回提示

[phoenix@controller ~ 10:14:18]$ vim testif.sh
#!/bin/bashif systemctl status sshd | grep -q inactive;then
systemctl start sshd && echo sshd success
else echo "sshd started"
fi[phoenix@controller ~ 10:16:19]$ sudo bash testif.sh 
sshd started
[phoenix@controller ~ 10:16:29]$ sudo systemctl stop sshd
[phoenix@controller ~ 10:16:40]$ sudo bash testif.sh 
sshd success

if双分支

[phoenix@controller ~ 10:27:07]$ vim testif2.sh#!/bin/bashif systemctl status sshd | grep -q inactive;then
systemctl start sshd && echo sshd success
else echo "sshd started"
fi[phoenix@controller lab 10:33:33]$ bash testif2.sh 
Usage: testif2.sj start|stop|status

if条件语句应用

#判断字符串是否为数字
#思路一 输出hello123 sed替换数字为空格
#      判断字符串长度是否为0
[phoenix@controller ~ 17:14:49]$ [ -n "$(echo hello123|sed 's/[0-9]//g')" ] && echo char || echo int
char#123为数字 判断为0
[phoenix@controller ~ 17:15:00]$ [ -n "$(echo 123|sed 's/[0-9]//g')" ] && echo char || echo int
int

shell函数

语法

function 函数名 () {指令...return n
}#简写
函数名 () {指令...return n
}

shell函数应用

#示例一 hello函数 先定义后调用
[phoenix@controller lab 17:34:40]$ cat fun1.sh 
#!/bin/bash
function hello(){echo "hello world ! "
}
hello
[phoenix@controller lab 17:34:48]$ bash fun1.sh 
hello world !#示例二 调用外部函数
[phoenix@controller lab 17:35:08]$ cat mylib
function hello (){echo "hello world ! "
}
[phoenix@controller lab 17:34:52]$ cat fun3.sh
#!/bin/bash
if [ -r mylib ];thensource mylib
elseecho mylib is not existexit 1
fi
hello
[phoenix@controller lab 17:36:03]$ bash fun3.sh
hello world ! #示例三 带参数的函数
[phoenix@controller lab 17:36:19]$ cat fun4.sh 
#!/bin/bash
function print () {if [ "$1" == "PASS" ];thenecho -e '\033[1;32mPASS\033[0;39m'elif [ "$1" == "FAIL" ];thenecho -e '\033[1;31mFAIL\033[0;39m'elif [ "$1" == "DONE" ];thenecho -e '\033[1;35mDONE\033[0;39m'elseecho "Usage: print PASS|FAIL|DONE"fi
}
read -p "请输入你想要打印的内容:" str
print $str[phoenix@controller lab 17:37:23]$ bash fun4.sh 
请输入你想要打印的内容:hello
Usage: print PASS|FAIL|DONE
[phoenix@controller lab 17:37:38]$ bash fun4.sh 
请输入你想要打印的内容:PASS
PASS
[phoenix@controller lab 17:37:43]$ bash fun4.sh 
请输入你想要打印的内容:FAIL     
FAIL
[phoenix@controller lab 17:37:52]$ bash fun4.sh 
请输入你想要打印的内容:DONE
DONE#示例四 hello函数的变量调用
[phoenix@controller lab 17:40:45]$ cat fun5.sh 
#!/bin/bash
function print () {if [ "$1" == "PASS" ];thenecho -e '\033[1;32mPASS\033[0;39m'elif [ "$1" == "FAIL" ];thenecho -e '\033[1;31mFAIL\033[0;39m'elif [ "$1" == "DONE" ];thenecho -e '\033[1;35mDONE\033[0;39m'elseecho "Usage: $0 PASS|FAIL|DONE"
fi
}
str=$2
print $str
[phoenix@controller lab 17:40:49]$ bash fun5.sh 
Usage: fun5.sh PASS|FAIL|DONE
[phoenix@controller lab 17:41:03]$ bash fun5.sh PASS
Usage: fun5.sh PASS|FAIL|DONE
[phoenix@controller lab 17:41:08]$ bash fun5.sh DONE
Usage: fun5.sh PASS|FAIL|DONE#执行逻辑
#step1 执行str=$2
#step2 赋值给print
#step3 此时$1是$str的值

shell函数递归

[phoenix@controller lab 18:55:22]$ bash sum.sh 
1+2+3+4+5+6+7+8+9+10 = 55[phoenix@controller lab 18:55:28]$ cat sum.sh 
#!/bin/bash#-eq 对比数字 当递归到1时直接返回1
#else执行递归
sum() {local n=$1if [ $n -eq 1 ]; thenecho 1else#递归调用n + sum(n-1)local prev=$(sum $((n-1)))echo $((n + prev))fi
}#调用函数计算1到10的和
#sum自增10次的和
result=$(sum 10)
echo "1+2+3+4+5+6+7+8+9+10 = $result"

case条件语句

case的功能替代了if/else的多分支条件语句,在case语句中,程序会将case获取的变量的值与表达式部分的值1、值2、值3等逐个进行比较,如果获取的变量值匹配和case项匹配,就会执行指令,直到执行到双分号(;;)才停止,然后跳出case语句

语法

case "变量值" in值1)指令1...;;值2)指令2...;;*)指令3...;;
esac

case条件语句应用

[phoenix@controller lab 19:05:22]$ cat case.sh 
#case 变量 in
#!/bin/bash
case $1 instart)systemctl start sshd;;stop)systemctl stop sshd;;restart|reload) systemctl restart sshd;;(*)echo "Usage,case.ssh start|stop|restart/loead||status";;
esac[phoenix@controller lab 19:05:37]$ bash case.sh
Usage,case.ssh start|stop|restart/loead||status#case2 是更简明的写法
[phoenix@controller lab 19:05:39]$ cat case2.sh 
#!/bin/bash
case $1 instart|stop|restart|reload|status)systemctl $1 sshd
;;*)echo "Usage:case-ssh start|stop|reload|status"
;;
esac[phoenix@controller lab 19:05:44]$ bash case2.sh 
Usage:case-ssh start|stop|reload|status[phoenix@controller lab 19:05:49]$ bash case2.sh start
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: phoenix
Password: 
==== AUTHENTICATION COMPLETE ===[phoenix@controller lab 19:06:09]$ bash case2.sh stop
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: phoenix
Password: 
==== AUTHENTICATION COMPLETE ===[phoenix@controller lab 19:06:44]$ bash case2.sh restart
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: phoenix
Password: 
==== AUTHENTICATION COMPLETE ===

服务器批量管理

主机名IP 地址
ha1.market.com10.1.8.21
ha2.market.com10.1.8.22
proxy1.market.com10.1.8.23
proxy2.market.com10.1.8.24
company1.market.com10.1.8.25
company2.market.com10.1.8.26
shop1.market.com10.1.8.27
shop2.market.com10.1.8.28
db1.market.com10.1.8.29
db2.market.com10.1.8.30
storage.market.com10.1.8.31
backup.market.com10.1.8.32
network.market.com10.1.8.33
client.market.com10.1.8.34
[phoenix@controller ~ 19:57:59]$ cat sethost 
#!/bin/bash
#定义变量 网卡和与域名
interface=ens33
domain=market.com#usage 提示错误信息
#exit 退出码1 执行失败
usage (){echo "Usage: $0 21-34"exit 1
}#定义函数 设置ip
#当$setip小于0退出
function set_ip () {if [ $# -eq 0 ]; thenusage   elsenmcli connection modify $interface ipv4.address 10.1.8.$1/24nmcli connection up $interfacefi}#hostname函数
function set_host () {case $1 in21|22)HOSTNAME=ha$[ $1 - 20 ].$domain;;23|24)HOSTNAME=proxy$[ $1 - 22 ].$domain;;25|26)HOSTNAME=company$[ $1 - 24 ].$domain;;27|28)HOSTNAME=shop$[ $1 - 26 ].$domain;;29|30)HOSTNAME=db$[ $1 - 28 ].$domain;;31)HOSTNAME=storage.$domain;;32)HOSTNAME=backup.$domain;;33)HOSTNAME=network.$domain;;34)HOSTNAME=client.$domain;;*)usage;;esachostnamectl set-hostname $HOSTNAME
}
#main函数
function main() {set_ip $1set_host $1
}main $*

while循环

[phoenix@controller ~ 22:27:54]$ bash while.sh 
20
[phoenix@controller ~ 22:27:56]$ cat while.sh 
#!/bin/bash
i=10
while [ $i -lt 20 ] 
do i=$((i + 1))
done
echo $i#while 当$i小于20循环
#do i=i+1

until循环

[phoenix@controller ~ 23:15:53]$ bash until.sh 
i got money ....
i got this
i have to go to the bank
[phoenix@controller ~ 23:15:55]$ cat until.sh 
#!/bin/bashtarget=1000000
money=100000
until(($money>=$target))
doecho "i got money ...."sleep 0.01money=$[money+1000000]echo "i got this"
done
echo i have to go to the bank#target变量
#money变量#until money>target
#do 0.01s +100000money
#满足条件后跳出until输出echo

for循环

算法实践

九九乘法表

[phoenix@controller ~ 23:29:15]$ bash nine.sh 
1*1=1  
1*2=2  2*2=4  
1*3=3  2*3=6  3*3=9  
1*4=4  2*4=8  3*4=12 4*4=16 
1*5=5  2*5=10 3*5=15 4*5=20 5*5=25 
1*6=6  2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
1*7=7  2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
1*8=8  2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
1*9=9  2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 
[phoenix@controller ~ 23:29:16]$ cat nine.sh
#!/bin/bashfor i in $(seq 1 9)
dofor j in $(seq 1 $i)doproduct=$((i * j))printf "%d*%d=%-2d " $j $i $productdoneecho
done#seq 输出数字列
#for 第一层循环i=1-9
#for 第二层循环j输出1-9($i)
#product变量存储i*j乘积
#printf 控制格式
#%d*%d=%-2d 格式化字符串 -2 左对齐占2个字符宽度
#done 每完成一次循环(一行)换行

三对元素配对

3个新郎为A、B、C,3个新娘为X、Y、Z。有人想知道究竟谁与谁结婚,于是就问新人中的三位,得到如下结果:

  • A说他将和X结婚;
  • X说她的未婚夫是C;
  • C说他将和Z结婚。

这人事后知道他们说的全是假话。那么,究竟谁与谁结婚呢?

解题思路

  1. 都是假话可以根据条件判断
  2. 多个人不能同时和一个人结婚
  3. A不等于X
  4. X不等于C
  5. C不等于Z
  6. B=X Z=A C=Y
#!/bin/bash
for A in X Y Z
dofor B in X Y Zdofor C in X Y Zdoif [ "$A" != "$B" -a "$A" != "$C" -a "$B" != "$C" -a "$A" != "X" -a "$C" != "X" -a "$C" != "Z" ];thenecho A 与 $A 结婚echo B 与 $B 结婚echo C 与 $C 结婚fidonedone
done#for A 在三个元素中do
#for B 在三个元素中do
#for C 在三个元素中do
#在C的for循环do条件判断
#if A不等于B A不等于C
#   B不等于C A不等于X
#   C不等于X C不等于Z
#条件判断输出
http://www.dtcms.com/a/343480.html

相关文章:

  • AI 产业落地:从 “实验室神话” 到 “车间烟火气” 的跨越
  • 【TrOCR】模型预训练权重各个文件解读
  • SpringAI1.0.1实战教程:避坑指南25年8月最新版
  • 近端策略优化算法PPO的核心概念和PyTorch实现详解
  • Typescript入门-函数讲解
  • 创建一个springboot starter页面
  • LG P2617 Dynamic Rankings Solution
  • 1688 商品详情接口数据全解析(1688.item_get)
  • 关于从零开始写一个TEE OS
  • 如何安装 VMware Workstation 17.5.1?超简单步骤(附安装包下载)
  • Building Systems with the ChatGPT API 使用 ChatGPT API 搭建系统(第四章学习笔记及总结)
  • 一文讲清楚:场景、痛点、需求
  • mainMem.useNamedFile = “FALSE“ 的效果
  • UE5多人MOBA+GAS 52、下载源码构建引擎
  • 如何处理项目中棘手的依赖版本冲突问题
  • 软考中级【网络工程师】第6版教材 第3章 局域网 (下)
  • 构造参数注入解决循环依赖问题
  • 射频电路的完整性简略
  • rt-thread使用sfud挂载qspi flash的trace分析
  • Linux ELF二进制文件数字签名工具:原理与设计思路(C/C++代码实现)
  • SQL聚合情景解读
  • 【笔记】Facefusion3.3.2 之 NSFW 检测屏蔽测试
  • 代码随想录算法训练营27天 | ​​56. 合并区间、738.单调递增的数字、968.监控二叉树(提高)
  • 机器学习6
  • 机器学习-聚类算法
  • 告别研发乱局,决胜项目先机——全星APQP系统,为汽车部件制造商量身打造的数字化研发管理引擎
  • GPT5 / 深度研究功能 无法触发
  • 4.Shell脚本修炼手册---变量进阶知识
  • 加速你的故障排查:使用 Elasticsearch 构建家电手册的 RAG 应用
  • 如何实现文档处理全流程自动化?