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