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

shell脚本3

  • for语句(一种循环控制结构,用于遍历列表或者范围内的元素,并对每个元素执行一段代码
  • 语法格式

for 变量名 in 取值列表

do

  命令序列

done

入门示例:

for i in 1 2 3 4 5 6                     # for i in {1..6} 或 for i in $(cat /root/nums.txt)

do

echo $i

done

  • While语句(一种循环控制结构,它会重复执行一段代码块,直到指定的条件为假为止。当条件为真时,代码块会被执行
  1. 语法格式:

While       [ 条件判断 ]

do

循环体

done

入门示例

i=1

while [ $i -le 10 ]

do

echo $i

let  i++

done

换成for循环

for ((i=1;i<=10;i++))

do

echo $i

done

  • case语句(一种用于多条件判断的控制结构
  • 语法格式:

case  变量值  in

模式1)

    命令序列1

    ;;

模式2)

    命令序列2

    ;;

 ……

* )

    默认命令序列

esac

入门示例

提示用户输入一个字符,判断出该字符是字母、数字或者其他字符

#!/bin/bash

read -p "请输入一个字符,并按Enter键确认:" KEY

case "$KEY" in

  [a-z]|[A-Z])

      echo "您输入的是字母。"

      ;;

  [0-9])

      echo "您输入的是数字。"

      ;;

  *)

      echo "您输入的是空格、功能键或其他控制字符。"

esac

  • 应用实例

1通过员工名单列表,为公司每个员工创建一个账号,并设置初始密码,要求用户第一次登录改密码

创建一个员工列表并添加员工:

创建脚本编辑:jiaob.sh

users=$(cat /yuangong)

for user in $users

do

        useradd $user

        echo "$user:0000" | chpasswd

        chage -d 0 $user

done

逐行解释:

users=$(cat /yuangong):

    • 这行命令用于将文件 /yuangong 中的内容读取到变量 users 中。
    • cat 命令用于将文件内容输出到标准输出。

for user in $users:

    • 这是一个循环结构,用于遍历变量 users 中的每个用户名。

useradd $user:

    • useradd 命令用于创建新用户。
    • $user 是当前循环中的用户名。

echo "$user:0000" | chpasswd:

    • echo "$user:0000" 输出用户名和密码,使用 : 分隔。
    • | 将输出结果通过管道传递给 chpasswd 命令,用于设置用户密码。
    • 初始密码为 "0000"。

chage -d 0 $user:

    • chage 命令用于修改用户密码过期信息。
    • -d 0 表示设置用户密码过期时间为 0,即下次登录时需要修改密码。
    • $user 是当前循环中的用户名

效果:

2:通过服务器主机ip列表,批量检查主机生存状态

创建一个IP主机列表文件并添加IP:(这里为了展示实验效果,写了一个可访问一个不可访问的)

创建脚本:cat /jiao2.sh

hosts=$(cat /zhuji)

for host in $hosts

do

        ping -c 3 -i 0.2 -W 1 $host &> /dev/null

       

        if [ $? -eq 0 ]

        then

                 echo "目标网段可以联机"

        else

                 echo "目标网段不可达"

        fi

done

具体步骤如下:

hosts=$(cat /zhuji):将文件 /zhuji 中的主机列表读取到变量 hosts 中。

for host in $hosts:使用循环遍历 hosts 中的每个主机。

ping -c 3 -i 0.2 -W 1 $host &> /dev/null:执行 ping 命令来检测主机的可达性。

    • -c 3 表示发送 3 个 ICMP 回显请求。
    • -i 0.2 表示设置间隔时间为 0.2 秒。
    • -W 1 表示设置超时时间为 1 秒。
    • $host 是当前循环中的主机地址。
    • &> /dev/null 表示将 ping 命令的输出重定向到 /dev/null,即丢弃输出,只保留命令执行结果。

if [ $? -eq 0 ]:检查 ping 命令的退出状态码是否为 0,如果是则表示主机可以访问。

echo "目标网段可以联机":如果主机可以访问,则输出 "目标网段可以联机"。

else:如果主机不可访问,则执行以下操作。

echo "目标网段不可达":输出 "目标网段不可达"。

效果:

  1. 批量添加20个用户,要求用户名为前缀stu加两位数字组成(即stu01-stu20

创建脚本:jb.sh

i=1

while [ $i -le 20 ]

do

        if [ $i -lt 10 ]

        then

                 useradd stu0$i

        else

                 useradd stu$i

        fi

        let i++

done

具体步骤如下:

i=1:初始化一个变量 i,用于循环计数,起始值为 1

while [ $i -le 20 ]:设置一个循环条件,当 i 的值小于等于 20 时执行循环体。

if [ $i -lt 10 ]:检查 i 的值是否小于 10,如果是,则执行以下操作。

useradd stu0$i:使用 useradd 命令创建用户名为 stu0$i 的用户账号,其中 $i 是循环计数器,如果 i 的值小于 10,则在用户名前面加上一个 0,比如 stu01stu02 等。

else:如果 i 的值不小于 10,则执行以下操作。

useradd stu$i:创建用户名为 stu$i 的用户账号,其中 $i 是循环计数器,比如 stu10stu11 等。

let i++:递增循环计数器 i 的值。

效果:

要查看历史命令,你可以使用类似以下的命令:

bashCopy Code

history

  1. 源码安装nginx,并把nginx添加成系统服务(nginx依赖包pcre-devel、zlib-devel、gcc)

源码安装:

https://nginx.org/download/nginx-1.24.0.tar.gz

tar xf nginx-1.24.0.tar.gz

cd nginx-1.24.0/

yum -y install pcre-devel zlib-devel gcc  #安装依赖包

./configure --prefix=/usr/local/nginx && make && make install

ps axuf 查看

ps axuf 是一个用于查看系统进程状态的命令。在 Linux 系统中,ps 命令用于显示当前进程的状态信息。下面是对 ps axuf 命令中各个选项的解释:

  • a: 显示所有用户的进程,包括其他用户和系统进程。
  • x: 显示没有控制终端的进程。
  • u: 以用户为主的格式显示进程信息,包括用户、进程ID(PID)、CPU使用率、内存使用量等。
  • f: 显示进程间的关系树,以树状结构展示进程之间的父子关系。

因此,ps axuf 命令将以树状结构显示所有用户的进程信息,包括进程间的父子关系,并且会显示没有控制终端的进程

创建多条件判断控制脚本(/etc/init.d 目录通常用于存放系统服务的启动脚本):

vim /etc/init.d/nginx

#!/bin/bash

#chkconfig: - 90 20

case $1 in

start)

        /usr/local/nginx/sbin/nginx

        ;;

stop)

        killall -s QUIT nginx

        ;;

restart)

        killall -s QUIT nginx

        /usr/local/nginx/sbin/nginx

        ;;

*)

        echo "未知字符,请重新确认字符:start|stop|restart"

esac

添加执行权限:chmod +x /etc/init.d/nginx

测试:(netstat -lntp:查看端口号)

添加为系统服务:

(如果刚刚用脚本启动过服务,需要再用脚本把服务关闭)

chkconfig --add nginx

systemctl start或stop或restart  nginx

编写测试访问页面内容,就可以访问了:vim /usr/local/nginx/html/index.html

也可以覆盖内容:

echo 欢迎访问 > /usr/local/nginx/html/index.html

如果要被访问的话需关闭防火墙:

systemctl stop firewalld

这个命令用于停止运行中的防火墙服务。在大多数基于系统DLinux发行版中,firewalld是默认的防火墙管理器,用于管理网络访问控制规则

setenforce 0

这个命令用于临时禁用SELinuxSecurity-Enhanced Linux)安全模块。SELinux是一个Linux内核安全模块,提供了强大的安全性增强功能,用于控制进程的访问权限。通过将其设置为"0",表示将SELinux设置为Permissive模式,即它会记录但不阻止违规操作

相关文章:

  • 【基础IO上】复习C语言文件接口 | 学习系统文件接口 | 认识文件描述符 | Linux系统下,一切皆文件 | 重定向原理
  • OpenAI 最新 o3 集成到 Cursor 和 Cline 工作流程中
  • SIEMENS PLC 程序 GRAPH 程序解读 车型入库
  • 从桥梁坍塌到地质隐患:超导磁测量技术的“防患未然”价值
  • 模方ModelFun是什么?如何安装?
  • MiniMind模型的web交互功能初试
  • 驱动支持的最高CUDA版本与实际安装的Runtime版本
  • cpu性能统计
  • 小火电视桌面 TV版 老旧历史版本安装包 官方免费下载
  • 本地使用Ollama部署DeepSeek
  • 实时交互式AIGC系统开发:打造多模态数字人全栈解决方案
  • 基于图扑 HT 实现的智慧展馆数字孪生应用
  • 大模型应用开发(PAFR)
  • 实现层归一化
  • 燃气经营从业人员有哪些类别
  • 计算机组成原理-408考点-数的表示
  • [DDD传灯录]禅师:这,就是领域驱动设计(01-02)
  • py语法基础理解
  • C++中随机数的产生
  • 登高架设作业证考试的实操项目有哪些?
  • 应勇:以法治力量服务黄河流域生态保护和高质量发展
  • 识味顺德︱顺德菜的醉系列与火滋味
  • 博物馆有一项活动40岁以上不能参加?馆方回应
  • 好未来:2025财年收入增长51%,下个财年提高整体盈利能力是首要任务
  • 限时离境、关闭领空、暂停贸易,巴基斯坦宣布一系列对印反制措施
  • 2024年度全国十大考古新发现公布,武王墩一号墓等入选