【SXFU-云计算】Linux操作系统基础-Part9- shell 综合练习

shell 综合练习

加强 shell awk 用法

shell 综合练习

一、统计 netstat -anp 状态下为 LISTEN 和 ESTABLISHED 的连接数量

1
2
3
4
5
6
7
# !/bin/bash
# 统计 netstat -anp 状态下为 LISTEN 和 ESTABLISHED 的连接数量
listen_count=$(netstat -anp | grep "LISTEN" | wc -l)
established_count=$(netstat -anp | grep "ESTABLISHED" | wc -l)

echo "LISTEN 连接数量: $listen_count"
echo "ESTABLISHED 连接数量: $established_count"
1
netstat -lnta | awk '$6 ~ /ESTABLISHED|LISTEN/ {sum[$6]++} END {for (i in sum) print i, sum[i]}'

二、编写 shell 脚本将 /root 目录下大于 1KB 的文件复制到 /tmp 目录下

1
2
3
4
5
#!/bin/bash
# 将 /root 目录下大于 1KB 的文件复制到 /tmp 目录下
find /root -type f -size +1k -exec cp {} /tmp \;

echo "所有大于 1KB 的文件已复制到 /tmp 目录下。"
1
2
3
4
5
6
# !/bin/bash
for file in `ls -l /root | awk '$5 > 1000'`;do
if [ -f $file ]; then
cp $file /tmp/
fi
done

三、打印 99 乘法表,显示为倒三角形

1
2
3
4
5
6
7
8
#!/bin/bash
# 打印 99 乘法表,显示倒三角形
for ((i=9; i>=1; i--)); do
for ((j=1; j<=i; j++)); do
echo -n "$j*$i=$(($j*$i))\t"
done
echo
done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# !/bin/bash
for ((i = 1; i <= 9; ++ i))
do
for ((j = 1; j <= 9; j ++))
do
if [ $j -ge $i ]
then
echo -ne "$i*$j=$((i*j))\t"
else
echo -ne "\t"
fi
done
echo
done

四、编写计算器

编写计算器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/bin/bash
# 整数计算器脚本,实现加减乘除功能

# 检查参数数量
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <operand1> <operator> <operand2>"
exit 1
fi

# 获取参数
operand1=$1
operator=$2
operand2=$3

# 检查运算符
case $operator in
+)
result=$((operand1 + operand2))
;;
-)
result=$((operand1 - operand2))
;;
x)
result=$((operand1 * operand2))
;;
/)
if [ $operand2 -eq 0 ]; then
echo "Error: Division by zero"
exit 1
else
result=$((operand1 / operand2))
fi
;;
*)
echo "Error: Invalid operator"
exit 1
;;
esac

# 输出结果
echo "Result: $result"

编写计算器

五、猜数字游戏

五、猜数字游戏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash
# 生成一个100以内的随机数,并提示用户猜数字

# 生成随机数
random_number=$((RANDOM % 100 + 1))

# 提示用户猜数字
while true; do
read -p "请输入一个1到100之间的数字: " guess

# 检查输入是否为有效数字
if ! [[ "$guess" =~ ^[0-9]+$ ]]; then
echo "无效输入,请输入一个数字。"
continue
fi

# 检查数字是否在1到100之间
if [ "$guess" -lt 1 ] || [ "$guess" -gt 100 ]; then
echo "数字必须在1到100之间。"
continue
fi

# 比较猜测的数字和随机数
if [ "$guess" -eq "$random_number" ]; then
echo "恭喜你,猜对了!"
break
elif [ "$guess" -lt "$random_number" ]; then
echo "猜小了,请再试一次。"
else
echo "猜大了,请再试一次。"
fi
done

猜数字游戏

六、计算年龄

image-20241208203721338

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
# 脚本提示用户输入出生年月日,并计算当前年龄

# 提示用户输入出生年月日
read -p "请输入你的出生年月日 (yyyy-mm-dd): " birth_date

# 使用正则表达式验证输入格式
if ! [[ $birth_date =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "输入格式不正确,请输入格式为 yyyy-mm-dd 的日期。"
exit 1
fi

# 使用 awk 将 yyyy-mm-dd 转换成 yyyymmdd
formatted_date=$(echo $birth_date | awk -F '-' '{printf "%04d%02d%02d", $1, $2, $3}')

# 获取当前日期
current_date=$(date +%Y-%m-%d)
current_date_formatted=$(echo $current_date | awk -F '-' '{printf "%04d%02d%02d", $1, $2, $3}')

# 计算年龄
age=$(( (current_date_formatted - formatted_date) / 365 ))

# 计算天数
days=$(( (current_date_formatted - formatted_date) % 365 ))

# 输出结果
echo "你的年龄是 $age 年 $days 天。"
echo "出生日期格式化为 yyyymmdd: $formatted_date"

计算年龄

  • Copyrights © 2024-2025 brocademaple
  • 访问人数: | 浏览次数:

      请我喝杯咖啡吧~

      支付宝
      微信