Linux|shell编程|课堂练习实验和代码

文章介绍了多个基础的Shell脚本示例,包括数值计算、用户输入验证、文件操作、数据处理、时间日期、用户界面交互等,展示了Shell编程的基本技能和逻辑控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.编写一个shell脚本,计算1~100的和?

#!/bin/sh
sum=0
for i in $(seq 1 100)
do
  sum=$((sum + i))
done
echo "1~100的和为:$sum"

2.编写 Shell 脚本,输人一个数字n并计算 1~n 的和。要求:如果输入的数字小 于1,则重新输入,直到输人正确的数字为止。

#!/bin/sh

valid_input=false

while [ "$valid_input" = false ]
do
  read -p "请输入一个大于等于 1 的数字 n: " n
  if [ "$n" -ge 1 ] 2>/dev/null; then
    valid_input=true
  else
    echo "输入错误,请重新输入。"
  fi
done

sum=0
for i in $(seq 1 "$n")
do
  sum=$((sum + i))
done

echo "1~$n 的和为:$sum"

3.编写Shell脚本,批量建立用户user_00、user_01,···‘user_99

#!/bin/sh

for i in $(seq -w 0 99)
do
  username="user_$i"
  useradd "$username"
  echo "用户 $username 创建成功"
done

4.编写Shell脚本,实现两个变量之间的加减乘除运算。

#!/bin/bash

# 输入两个数字
read -p "请输入第一个数字: " num1
read -p "请输入第二个数字: " num2

# 加法运算
addition=$((num1 + num2))
echo "加法运算结果为: $addition"

# 减法运算
subtraction=$((num1 - num2))
echo "减法运算结果为: $subtraction"

# 乘法运算
multiplication=$((num1 * num2))
echo "乘法运算结果为: $multiplication"

# 除法运算
if [ $num2 -ne 0 ]; then
  division=$(echo "scale=2; $num1 / $num2" | bc)
  echo "除法运算结果为: $division"
else
  echo "除法运算错误: 除数不能为零"
fi

5.编写 Shell 脚本,实现备份文件:每天 18:00 归档/etc 目录下的所有文件,归 档文件名为如下形式:etc-YYYY-MM-DD;保存在/home/user/backup 目录下其中user 为当前登录用户名

#!/bin/bash

# 获取当前登录用户名
current_user=$(whoami)

# 创建备份目录
backup_dir="/home/$current_user/backup"
mkdir -p $backup_dir

# 归档文件名
archive_file="etc-$(date +'%Y-%m-%d').tar.gz"

# 归档/etc目录下的所有文件
tar -zcf "$backup_dir/$archive_file" /etc

echo "已备份/etc目录到 $backup_dir/$archive_file"

6.编写shell编程,实现使用for循环、while循环、until循环计算100以内所有奇数的和

#!/bin/bash

sum=0
for ((i=1; i<=100; i+=2)); do
    ((sum+=i))
done

echo "使用for循环,100以内所有奇数的和为:$sum"
#!/bin/bash

sum=0
num=1
while ((num<=100)); do
    ((sum+=num))
    ((num+=2))
done

echo "使用while循环,100以内所有奇数的和为:$sum"
#!/bin/bash

sum=0
num=1
until ((num>100)); do
    ((sum+=num))
    ((num+=2))
done

echo "使用until循环,100以内所有奇数的和为:$sum"

7.编写shell编程,实现通过循环实现从1开始叠加,直到和的结果大于5000为止(使用break循环控制符)

#!/bin/bash

sum=0
num=1

while true; do
    ((sum+=num))

    if ((sum > 5000)); then
        break
    fi

    ((num++))
done

echo "和的结果大于5000时,最后一个数字为:$num"
echo "和的结果为:$sum"

8.编写shell编程,实现找出1000以内所有能被3整除的数,每行显示10个数,然后换行显示

#!/bin/bash

count=0

for ((num=1; num<=1000; num++)); do
    if ((num % 3 == 0)); then
        echo -n "$num "
        ((count++))

        if ((count % 10 == 0)); then
            echo    # 换行
        fi
    fi
done

9.编写shell编程,实现显示颜色类型,并让用户选择(使用select结构)

#!/bin/bash

# 定义颜色
red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
blue='\033[0;34m'
magenta='\033[0;35m'
cyan='\033[0;36m'
reset='\033[0m' # 重置颜色

# 选项列表
options=("Red" "Green" "Yellow" "Blue" "Magenta" "Cyan" "Quit")

# 选择颜色类型
select option in "${options[@]}"; do
    case $option in
        "Red")
            echo -e "${red}You selected Red color.${reset}"
            break
            ;;
        "Green")
            echo -e "${green}You selected Green color.${reset}"
            break
            ;;
        "Yellow")
            echo -e "${yellow}You selected Yellow color.${reset}"
            break
            ;;
        "Blue")
            echo -e "${blue}You selected Blue color.${reset}"
            break
            ;;
        "Magenta")
            echo -e "${magenta}You selected Magenta color.${reset}"
            break
            ;;
        "Cyan")
            echo -e "${cyan}You selected Cyan color.${reset}"
            break
            ;;
        "Quit")
            echo "Quitting..."
            exit 0
            ;;
        *)
            echo "Invalid option. Please select again."
            ;;
    esac
done

10.编写shell编程,实现显示当前工作目录下的文件数和目录数

#!/bin/bash

# 获取当前工作目录
current_dir=$(pwd)

# 统计文件数和目录数
file_count=0
dir_count=0

# 遍历当前工作目录下的所有文件和目录
for entry in $current_dir/*; do
    if [ -f "$entry" ]; then
        ((file_count++))
    elif [ -d "$entry" ]; then
        ((dir_count++))
    fi
done

echo "文件数:$file_count"
echo "目录数:$dir_count"

11.编写shell编程,实现打印下面图案: * *** ***** ******* ********* ******* ***** *** *

#!/bin/bash

n=5

for (( i=1; i<=n; i++ )); do
    for (( j=i; j<=n; j++ )); do
        echo -n " "
    done

    for (( k=1; k<=(2*i-1); k++ )); do
        echo -n "*"
    done
    echo ""
done


for (( i=n-1; i>=1; i-- )); do
    for (( j=n; j>=i; j-- )); do
        echo -n " "
    done

    for (( k=1; k<=(2*i-1); k++ )); do
        echo -n "*"
    done
    echo ""
done

12.编写一个shell编程,实现输入一个整数,判断是否为完数(完数:一个数恰好等于它的因子之和,如6=1+2+3)

#!/bin/bash

# 接收用户输入的整数
read -p "请输入一个整数: " num

# 初始化因子之和
sum=0

# 遍历从 1 到 num-1 的每个数,判断是否是 num 的因子
for (( i=1; i<num; i++ )); do
    if (( num % i == 0 )); then
        (( sum += i ))
    fi
done

# 判断是否为完数
if (( sum == num )); then
    echo "$num 是一个完数"
else
    echo "$num 不是一个完数"
fi

13.编写shell编程,实现输入一个数字(0-6),然后显示其对应的星期几 (使用case结构)

#!/bin/bash

# 接收用户输入的数字
read -p "请输入一个数字(0-6): " num

# 使用case结构判断输入的数字,并显示对应的星期几
case $num in
    0)
        echo "星期日"
        ;;
    1)
        echo "星期一"
        ;;
    2)
        echo "星期二"
        ;;
    3)
        echo "星期三"
        ;;
    4)
        echo "星期四"
        ;;
    5)
        echo "星期五"
        ;;
    6)
        echo "星期六"
        ;;
    *)
        echo "输入的数字无效"
        ;;
esac

14.编写shell编程,实现输入一个年份,判断是否为闰年,判断条件: (1)能被4整除,但不能被100整除的年份都是闰年; (2)能被100整除,但又能被400整除的年份是闰年。

#!/bin/bash

# 接收用户输入的年份
read -p "请输入一个年份: " year

# 判断是否为闰年
if (( year % 4 == 0 && year % 100 != 0 )) || (( year % 400 == 0 )); then
    echo "$year 是闰年"
else
    echo "$year 不是闰年"
fi

15.编写shell编程,实现打印九九乘法表

#!/bin/bash

# 打印九九乘法表
for (( i=1; i<=9; i++ )); do
    for (( j=1; j<=i; j++ )); do
        (( product = i * j ))
        echo -n "$j * $i = $product  "
    done
    echo ""
done

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值