SHELL练习01
判断一个数是奇数还是偶数
要求:
编写一个 Shell 脚本,用户输入一个整数,判断该数是奇数还是偶数,并输出结果。
[root@node test01]# touch Determine parity.sh
[root@node test01]# vim Determine parity.sh
还有 2 个文件等待编辑
#!/bin/bash
read -p "请输入一个整数: " num
if ((num % 2 == 0)); then
echo "$num 是偶数"
else
echo "$num 是奇数"
fi
[root@node test01]# chmod a+rx Determine parity.sh
[root@node test01]# ./Determine parity.sh
请输入一个整数: 7
7 是奇数
read -p
读取用户输入,并将其存入变量 num
((num % 2 == 0))
用于判断 num
是否能被 2 整除,若能整除,则是偶数,否则是奇数
计算 1 到 N 的累加和
要求:
编写一个 Shell 脚本,用户输入一个正整数 N
,计算 1+2+...+N
的累加和,并输出结果。
#!/bin/bash
read -p "请输入一个正整数 N: " N
sum=0
for ((i=1; i<=N; i++))
do
sum=$((sum + i))
done
echo "1 到 $N 的累加和是: $sum"
sum=$((sum + i))
进行累加运算
统计一个文件中某个单词出现的次数
要求:
编写一个 Shell 脚本,用户输入文件名和要查找的单词,统计该单词在文件中的出现次数。
#!/bin/bash
read -p "请输入文件名: " filename
read -p "请输入要查找的单词: " word
if [[ ! -f "$filename" ]]; then
echo "文件 $filename 不存在!"
exit 1
fi
count=$(grep -o -w "$word" "$filename" | wc -l)
echo "单词 '$word' 在文件 '$filename' 中出现了 $count 次"
-o
只匹配目标单词,不匹配整行
-w
确保匹配完整单词,而不是单词的子串
wc -l
计算匹配的行数,即单词出现的次数。
批量重命名文件
要求:
编写一个 Shell 脚本,将当前目录下所有 .txt
文件的扩展名改为 .bak
。
#!/bin/bash
for file in *.txt
do
if [[ -f "$file" ]]; then
mv "$file" "${file%.txt}.bak"
fi
done
echo "所有 .txt 文件已重命名为 .bak"
for file in *.txt
遍历所有 .txt
文件。
if [[ -f "$file" ]]
确保 file
是普通文件,而不是目录或其他类型的文件
mv "$file" "${file%.txt}.bak"
${file%.txt}
去掉 .txt
后缀 .bak
作为新的后缀名
批量创建用户并设置密码为 123
要求:
编写一个 Shell 脚本,批量创建用户&user并设置密码为 123
#!/bin/bash
input_file="users.txt"
if [[ ! -f "$input_file" ]]; then
echo "用户列表文件不存在!"
exit 1
fi
while read -r user; do
if id "$user" &>/dev/null; then
echo "用户 $user 已存在,跳过"
else
useradd "$user"
echo "$user:123" | chpasswd
echo "用户 $user 创建成功,密码已设置为 123"
fi
done < "$input_file"
[[ ! -f "$input_file" ]]
:如果 users.txt
文件不存在,则输出错误信息并退出脚本
id "$user"
:查询系统中是否存在该用户
&>/dev/null
:如果用户存在,屏蔽命令的标准输出和错误输出,防止屏幕上显示不必要的信息。
创建用户列表文件 users.txt
echo -e "user1\nuser2\nuser3" > users.txt
运行脚本
chmod +x batch_create_users.sh
./batch_create_users.sh
验证
cat /etc/passwd | grep "user"
su - user1