首页 > 系统相关 >Linux Shell 案例练习 ⑩

Linux Shell 案例练习 ⑩

时间:2025-01-09 17:01:08浏览次数:14  
标签:Shell 账号 创建 练习 用户 echo Linux 输入 奇数

1.使用Shell脚本实现计算1到用户输入整数n之间所有奇数和的示例:

#!/bin/bash

# 提示用户输入一个整数,并进行输入验证
while true; do
    echo "请输入一个整数n:"
    read n
    if [[ $n =~ ^[0-9]+$ ]]; then
        break
    else
        echo "输入无效,请输入一个整数。"
    fi
done


# 初始化奇数和为0
sum=0

# 循环遍历1到n之间的数
for (( i=1; i<=n; i++ )); do
    # 判断是否为奇数
    if [ $(expr $i % 2) -eq 1 ]; then
        sum=$((sum + i))
    fi
done

# 输出奇数和
echo "1到$n之间所有奇数的和为:$sum"

在这里插入图片描述

代码说明:

  1. 提示用户输入:使用echo命令提示用户输入一个整数,并使用read命令读取用户输入的内容存储到变量n中。
  2. 初始化变量:将变量sum初始化为0,用于存储奇数的和。
  3. 循环遍历:使用for循环从1到n遍历每个数字。
  4. 判断奇数:使用if语句结合expr命令判断当前数字是否为奇数。如果i除以2的余数等于1,则说明i是奇数。
  5. 累加奇数:如果是奇数,则将其累加到sum变量中。
  6. 输出结果:最后,使用echo命令输出1到n之间所有奇数的和。

将上述代码保存为一个文件(例如odd_sum.sh),并赋予执行权限:

chmod +x odd_sum.sh

然后运行脚本:

./odd_sum.sh

按照提示输入一个整数,即可得到1到该整数之间所有奇数的和。


2.使用 for 循环实现显示输入数字以内奇数的Shell脚本:

#!/bin/bash


while true; do
    echo "请输入一个整数:"
    read number
    if [[ $number =~ ^[0-9]+$ ]]; then
        break
    else
        echo "输入无效,请输入一个整数。"
    fi
done

# 使用for循环遍历从1到输入数字的所有数
for (( i = 1; i <= number; i++ )); do
    # 判断当前数字是否为奇数
    if (( i % 2!= 0 )); then
        echo $i
    fi
done

在这里插入图片描述

代码解释:

  1. 提示并读取用户输入
    • 使用 echo 命令输出提示信息,要求用户输入一个整数。
    • 使用 read 命令读取用户输入的内容,并将其存储在变量 number 中。
  2. for 循环
    • for (( i = 1; i <= number; i++ )) 表示从 1 开始,每次循环 i 自增 1,直到 i 大于 number 时停止循环。
  3. 判断奇数并输出
    • if (( i % 2!= 0 )) 用于判断当前的 i 是否为奇数,如果是奇数(即 i 除以 2 的余数不为 0),则执行 echo $i 输出该奇数。

将上述代码保存为一个文件(例如 odd_numbers.sh),然后在终端中执行以下命令赋予脚本执行权限:

chmod +x odd_numbers.sh

最后运行脚本:

./odd_numbers.sh

运行脚本后,按照提示输入一个整数,脚本就会输出该整数以内的所有奇数。


以下是一个使用Shell脚本批量创建文件夹的示例,用户可以输入要创建的文件夹数量,脚本会根据输入的数量创建相应数量的文件夹,文件夹名称依次为folder1folder2folder3

#!/bin/bash

# 提示用户输入要创建的文件夹数量
echo "请输入要创建的文件夹数量:"
read num

# 检查输入是否为正整数
if [[! $num =~ ^[0-9]+$ ]]; then
    echo "输入的不是有效的正整数。"
    exit 1
fi

# 循环创建文件夹
for ((i = 1; i <= num; i++)); do
    folder_name="folder$i"
    mkdir "$folder_name"
    if [ $? -eq 0 ]; then
        echo "成功创建文件夹:$folder_name"
    else
        echo "创建文件夹:$folder_name 失败。"
    fi
done

脚本说明:

  1. 读取用户输入:使用read命令读取用户输入的文件夹数量。
  2. 输入验证:使用正则表达式[[! $num =~ ^[0-9]+$ ]]检查用户输入是否为正整数。如果不是,输出错误信息并退出脚本。
  3. 循环创建文件夹:使用for循环,根据用户输入的数量创建相应数量的文件夹。文件夹名称通过字符串拼接生成,例如folder1folder2等。
  4. 创建结果反馈:使用mkdir命令创建文件夹,并通过检查命令的返回值($?)判断创建是否成功。如果成功,输出成功信息;否则,输出失败信息。

使用方法:

  1. 将上述脚本保存为一个文件,例如asd.sh
  2. 给脚本添加可执行权限:chmod +x asd.sh
  3. 运行脚本:./create_folders.sh,按照提示输入要创建的文件夹数量即可。

在这里插入图片描述


以下是一个使用Shell脚本批量创建账号并设置统一密码的示例:

#!/bin/bash

# 提示用户输入要创建的账号数量
echo "请输入要创建的账号数量:"
read num

# 检查输入是否为正整数
if [[ "$num" =~ ^[1-9][0-9]*$ ]]; then
    :
else
    echo "输入的不是有效的正整数。"
    exit 1
fi

# 提示用户输入账号名称前缀
echo "请输入账号名称前缀:"
read prefix

# 统一密码
password="123456"

# 循环创建账号并设置密码
for ((i = 1; i <= num; i++)); do
    username="${prefix}${i}"
    useradd "$username"
    if [ $? -eq 0 ]; then
        echo -e "$password\n$password" | passwd "$username" &> /dev/null
        if [ $? -eq 0 ]; then
            echo "成功创建账号 $username 并设置密码为 $password"
        else
            echo "设置账号 $username 密码失败"
            userdel -r "$username"
        fi
    else
        echo "创建账号 $username 失败"
    fi
done

脚本说明:

  1. 读取用户输入
    • 首先提示用户输入要创建的账号数量,并使用read命令读取该输入。
    • 接着提示用户输入账号名称前缀,同样使用read命令读取。
  2. 输入验证:使用正则表达式[[! $num =~ ^[0-9]+$ ]]检查用户输入的账号数量是否为正整数。如果不是,输出错误信息并退出脚本。
  3. 设置统一密码:将密码设置为123456
  4. 循环创建账号并设置密码
    • 使用for循环,根据用户输入的数量创建相应数量的账号。账号名称通过将用户输入的前缀和数字进行拼接生成,例如zhangsan1zhangsan2等。
    • 使用useradd命令创建账号。如果创建成功,使用echo -e "$password\n$password" | passwd "$username" &> /dev/null来设置密码,其中echo -e "$password\n$password"模拟用户输入两次相同的密码,|表示管道,将输出传递给passwd命令进行密码设置。
    • 如果密码设置成功,输出成功信息;如果密码设置失败,删除刚刚创建的账号并输出错误信息。如果账号创建失败,也输出错误信息。

使用方法:

  1. 将上述脚本保存为一个文件,例如create_users.sh
  2. 给脚本添加可执行权限:chmod +x create_users.sh
  3. 运行脚本:./create_users.sh,按照提示输入要创建的账号数量和账号名称前缀即可。

请注意,运行此脚本需要有足够的权限来创建用户账号,通常需要以管理员(root)身份运行。

在这里插入图片描述

创建后

在这里插入图片描述

在这里插入图片描述

标签:Shell,账号,创建,练习,用户,echo,Linux,输入,奇数
From: https://blog.csdn.net/weixin_44774466/article/details/144888011

相关文章