1.27笔记

文章目录

for 循环语句

for 循环语法结构

变量取值型

第一种for循环语句语法结构如下:

bash 复制代码
for 变量名 in 变量取值列表
do
  指令...
done

在此结构中"in 变量取值列表"可以省略,省略时相当于in "$@",也就是使用 for i 就相当于使用for i in "$@"

这种for循环语句执行过程如下:

  1. for关键字后面会有一个"变量名",变量名依次获取in关键字后面的变量取值列表内容(以空格分隔)。
  2. 每次仅取一个,然后进入循环(do和done之间的部分)执行循环内的所有指令,当执行到done时结束本次循环。
  3. 之后,"变量名"再继续获取变量列表里的下一个变量值,继续执行循环内的所有指令,当执行到done时结束返回。
  4. 以此类推,直到取完变量列表里的最后一个值并进入循环执行到done结束为止。

C 语言型

第二种for循环语句称为C 语言型for循环,语法结构如下:

bash 复制代码
for ((expl;exp2;exp3))
do
  指令...
done

此种循环语句和while循环语句类似,但语法结构比while循环更规范、工整。

这种for循环语句说明如下:

  1. for关键字后的双括号内是三个表达式:

    • 第一个是变量初始化(例如:i=0)

    • 第二个为变量的范围(例如:i<100)

    • 第三个为变量自增或自减(例如:i++)。

  2. 当第一个表达式的初始值符合第二个变量的范围时,就进入循环执行;条件不满足时就退出循环。

for 循环语句的基础实践

bash 复制代码
mkdir pics
touch pics/snap-2025-{1..12}.jpg
ls pics/snap-2025-{1..12}.jpg -1
[root@server bin 10:06:20]# ls -1 pics/
snap-2025-10.jpg
snap-2025-11.jpg
snap-2025-12.jpg
snap-2025-1.jpg
snap-2025-2.jpg
snap-2025-3.jpg
snap-2025-4.jpg
snap-2025-5.jpg
snap-2025-6.jpg
snap-2025-7.jpg
snap-2025-8.jpg
snap-2025-9.jpg

使用for语句将照片名称中2025改为2026

复制代码
for file in *
do 
  echo $file
done

${file//}

分析当前网络172.25.254.0/24网络中有哪些机器在线?

单台:

ping -c3 172.25.250.1 &>/dev/null
如何判断命令执行是否成功

  1. ping -c3 172.25.250.1 &>/dev/null

    $? 查看退出状态码

  2. ping -c3 172.25.250.1 | grep 抓取命令成功后的提示关键词

bash 复制代码
for host in 10.1.8.{10..12}
do
  ping -c1 -W2 $host &>/dev/null
  result=$?
  if ((result==0));then
    echo $host is online
  else
    echo $host is offline
  fi
done

shell脚本编写实例

要求在模版虚拟机中开发一个脚本sethost:

  1. 执行sethost 11,则设置改主机的主机名为ha1.cui.cloud,IP地址为10.1.8.11,网关为10.1.8.21 DNS为10.1.8.21
  2. 执行sethost 12,则设置改主机的主机名为ha2.cui.cloud,IP地址为10.1.8.12,网关为10.1.8.21 DNS为10.1.8.21
    以此类推
  3. 执行sethost 21,则设置改主机的主机名为network1.cui.cloud,IP地址为10.1.8.21,网关为10.1.8.2 DNS为10.1.8.223.5.5.5
  4. 执行sethost 22,则设置改主机的主机名为network2.cui.cloud,IP地址为10.1.8.22,网关为10.1.8.2 DNS为10.1.8.223.5.5.5

以下六台服务器全部克隆与模版虚拟机

复制代码
10.1.8.11 ha1.cui.cloud ha1
10.1.8.12 ha2.cui.cloud ha2
10.1.8.13 proxy1.cui.cloud proxy1
10.1.8.14 proxy2.cui.cloud proxy2
10.1.8.21 network1.cui.cloud network1
10.1.8.22 network2.cui.cloud network2

对于网络节点网关为10.1.8.2 DNS为223.5.5.5

对于其他节点网关为10.1.8.21 DNS为10.1.8.21

准备虚拟机和克隆虚拟机过程:

登录模版虚拟机,创建脚本文件

复制代码
[root@centos7 ~ 16:19:05]# mkdir bin
[root@centos7 ~ 16:19:11]# cd bin

务必要微调sethost脚本中两个参数:DOMAIN、CON_NAME

bash 复制代码
[root@centos7 bin 16:19:12]# vim sethost
#!/bin/bash
DOMAIN=cui.cloud
CON_NAME=ens32

ADDRESS=10.1.8.$1
GATEWAY=10.1.8.21
DNS=10.1.8.21

num=$1

if ((num>=11 && num<=14 || num== 21 || num ==22));then



  case $1 in
    1[12])
      HOSTNAME=ha$[$1-10].$DOMAIN
      ;;
    1[34])
      HOSTNAME=proxy$[$1-12].$DOMAIN
      ;;
    2[12])
      HOSTNAME=network$[$1-20].$DOMAIN
      GATEWAY=10.1.8.2
      DNS=223.5.5.5
      ;;
  esac


  hostnamectl set-hostname $HOSTNAME
  nmcli connection modify ${CON_NAME} ipv4.addresses $ADDRESS/24 ipv4.gateway $GATEWAY ipv4.dns $DNS
  nmcli connection up ${CON_NAME} &>/dev/null

#查看

  echo "Hostname: $(hostname)"
  echo "IP4:"
  nmcli device show ens32|grep ^IP4

else
  echo "Usage: $0 11-14 | 21-22"
fi
[root@centos7 bin 16:19:32]# chmod +x sethost
  1. 在模板虚拟机本地console中执行sethost命令测试,

例如:

复制代码
sethost 11
sethost 21

测试没有问题的情况下,在执行init 0关机。

  1. 打快照,快照名称为sethostname。

  2. 选中该快照,点击克隆,节省磁盘空间,选择链接克隆。

  3. 克隆完成后,启动这些虚拟机。

  4. 在克隆出来的虚拟机中执行脚本,设置主机名和网络信息。

    以network2 为例

    bash 复制代码
    sethost 21

    开发脚本weihu,用户维护集群:

  5. 脚本用法

    语法1: weihu cmd COMMAND,作用在集群中所有的机器上执行对应COMMAND命令

    语法2: weihu copy source target,作用将本地source文件,推送到集群中所有的机器上。

    例如: weihu copy /etc/fstab target:target

  6. 集群节点包括

    10.1.8.11 ha1.cui.cloud ha1

    10.1.8.12 ha2.cui.cloud ha2

    10.1.8.13 proxy1.cui.cloud proxy1

    10.1.8.14 proxy2.cui.cloud proxy2

    10.1.8.21 network1.cui.cloud network1

    10.1.8.22 network2.cui.cloud network2

维护脚本在ha1节点开发:

bash 复制代码
1. 配置/etc/hosts
[root@ha1 ~ 16:37:35]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.1.8.11 ha1.cui.cloud ha1
10.1.8.12 ha2.cui.cloud ha2
10.1.8.13 proxy1.cui.cloud proxy1
10.1.8.14 proxy2.cui.cloud proxy2
10.1.8.21 network1.cui.cloud network1
10.1.8.22 network2.cui.cloud network2

2. 配免密登录
[root@ha1 ~ 16:38:12]# [ -d ~/.ssh ] || mkdir -m 700 ~/.ssh
[root@ha1 ~ 16:38:38]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''
[root@ha1 ~ 16:39:21]# echo 'StrictHostKeyChecking no' >> /etc/ssh/ssh_config
[root@ha1 ~ 16:39:32]# for host in  ha{1,2} proxy{1,2} network{1,2}
do
 sshpass -p 123 ssh-copy-id root@$host &>/dev/null
 ssh root@$host hostname
done

3. 开发维护脚本
[root@ha1 ~ 16:42:31]# cd bin/
[root@ha1 bin 16:42:33]# vim weihu
#!/bin/bash

function usage () {
  echo "Usage: weihu cmd COMMAND, 在集群中所有的机器上执行对应COMMAND命令"
  echo "Usage: weihu copy source target,将本地source文件,推送到集群中所有的机器上"
  exit
}

action=$1

HOSTLIST='ha1 ha2 proxy1 proxy2 network1 network2'

(( $#<=1 )) && usage

case "$action" in
  "cmd")
    # 删除参数1
    shift
    COMMAND="$*"
    for host in $HOSTLIST
    do 
      ssh root@$host "$COMMAND"
    done
    ;;
  "copy")
    # 删除参数1
    shift
    for host in $HOSTLIST
    do 
      scp $1 root@$host:$2
    done
    ;;
  *)
    usage
    ;;
esac

[root@ha1 bin 16:52:01]# chmod +x weihu

4. 验证
[root@ha1 ~ 17:04:56]# weihu cmd hostname
ha1.cui.cloud
ha2.cui.cloud
proxy1.cui.cloud
proxy2.cui.cloud
network1.cui.cloud
network2.cui.cloud

[root@ha1 ~ 17:04:59]# weihu copy /etc/hostname /tmp
hostname                                              100%   16    21.3KB/s   00:00    
hostname                                              100%   16    12.5KB/s   00:00    
hostname                                              100%   16    12.5KB/s   00:00    
hostname                                              100%   16    13.3KB/s   00:00    
hostname                                              100%   16     8.6KB/s   00:00    
hostname                                              100%   16    12.2KB/s   00:00    

[root@ha1 ~ 17:05:18]# weihu cmd cat /tmp/hostname
ha1.cui.cloud
ha1.cui.cloud
ha1.cui.cloud
ha1.cui.cloud
ha1.cui.cloud
ha1.cui.cloud
相关推荐
我送炭你添花1 小时前
树莓派部署 GenieACS 作为终端TR-069 ACS(自动配置服务器)的详细规划方案
运维·服务器·网络协议
华农第一蒟蒻2 小时前
一次服务器CPU飙升的排查与解决
java·运维·服务器·spring boot·arthas
旖旎夜光2 小时前
Linux(12)(下)
linux·网络
日更嵌入式的打工仔2 小时前
(实用向)中断服务程序(ISR)的优化方向
笔记·单片机
郝亚军2 小时前
如何在windows11和Ubuntu linux之间互传文件
linux·运维·ubuntu
ghostmen2 小时前
Kuboard 离线安装与 K3s 集群绑定完整指南
linux·kuboard·k3s
j_xxx404_2 小时前
Linux:进程状态
linux·运维·服务器
济6172 小时前
linux 系统移植(第二十三期)---- 进一步完善BusyBox构建的根文件系统---- Ubuntu20.04
linux·运维·服务器
程序员 _孜然2 小时前
openkylin、ubuntu等系统实现串口自动登录
linux·运维·ubuntu