1. 生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了, 猜小了或猜大了,直至用户猜对脚本结束。 (提示: RANDOM 为系统自带的系统变量, 值为 0 ‐32767 的随机数,使用取余算法将随机数变为 1 ‐ 100 的随机数)
#!/bin/bash
# 生成 1-100 之间的随机整数
answer=$(( RANDOM % 100 + 1 ))
# 提示用户输入数字,直到猜对为止
while true
do
read -p "请猜一个 1-100 之间的整数:" guess
# 判断用户的猜测与答案的关系
if [ $guess -eq $answer ]; then
echo "恭喜你,猜对了!"
break
elif [ $guess -lt $answer ]; then
echo "猜小了,请再试一次。"
else
echo "猜大了,请再试一次。"
fi
done
RANDOM 是一个系统变量,它会生成一个范围为 0-32767 的随机整数。
为了将随机数限制在 1-100 的范围内,我们使用了取余算法:$(( RANDOM % 100 + 1 ))。
使用 read 命令提示用户输入猜测的数字,将其保存在变量 guess 中。
使用 if 语句判断用户的猜测是否与答案相等,如果相等,则提示用户猜对了,退出程序;否则,根据大小关系提示用户再次尝试。使用 break 命令退出 while 循环。
2. 使用 shell 脚本编写一函数 add 求两个数的和, 要求这两个数用位置参数传入,最后 输出结果。
#!/bin/bash
add() {
sum=$(( $1 + $2 ))
echo "The sum of $1 and $2 is $sum"
}
add $1 $2
add() 是函数的声明,它告诉 Shell 脚本我们正在定义一个名为 add 的函数。
$1 和 $2 是位置参数,它们表示传递给函数的第一个和第二个参数,分别对应于函数调用时的第一个和第二个参数。
sum=$(( $1 + $2 )) 是计算两个数的和,并将结果保存在变量 sum 中。
echo 命令将结果输出到标准输出流中。
在命令行中调用这个函数的方式如下:
$ ./add.sh 2 3
The sum of 2 and 3 is 5
其中 ./add.sh 是脚本的文件名,2 和 3 是传递给函数的两个参数。程序将计算这两个数字的和并输出结果。
3. 编写一个 shell 脚本,实现如下功能:把第二个位置参数及其以后的各个参数指定的 文件复制到第一个位置参数指定的目录中。
# 判断目标目录是否存在
if [ ! -d "$target_dir" ]; then
echo "目标目录不存在"
exit 1
fi
# 循环遍历所有参数,忽略第一个参数
for file in "${@:2}"; do
# 判断文件是否存在
if [ ! -f "$file" ]; then
echo "$file 不存在或不是一个文件"
continue
fi
# 复制文件到目标目录
cp "$file" "$target_dir"
echo "已复制 $file 到 $target_dir"
done
target_dir=$1 将第一个位置参数(即目标目录)赋值给变量 target_dir。
if [ ! -d "$target_dir" ]; then 如果目标目录不存在,则输出提示信息,然后退出脚本,返回错误码1。
for file in "${@:2}"; do 循环遍历除了第一个位置参数以外的所有参数。
if [ ! -f "$file" ]; then 如果文件不存在或不是一个文件,则输出提示信息,然后进入下一个循环。
cp "$file" "$target_dir" 复制文件到目标目录。
echo "已复制 $file 到 $target_dir" 输出提示信息。
假设保存为 copy_files.sh 文件,使用方法如下:
./copy_files.sh 目标目录 文件1 文件2 文件3 ...
其中,目标目录 是第一个位置参数,后面的各个参数指定要复制的文件。注意,目标目录必须存在,否则会提示错误。如果指定的文件不存在或不是一个文件,脚本会忽略该文件并输出提示信息。复制完成后,脚本会输出每个成功复制的文件名和目标目录。
4. 编写脚本模拟实现交互式文件目录操作,实现命令包括:dir-列出当前目录下的文件 和子目录;cd-切换目录;wcd-显示当前工作目录;create-创建一个文件;delete-删 除一个文件;rename-重命名文件;newdir-创建目录;deldir-删除目录;exit-退出系 统。(提示:可使用 select 命令实现交互操作,题目中要求实现的命令可用 Linux shell 中相关的命令模拟实现,如 dir 可用使用 ls 命令实现)。
#!/bin/bash
# 初始目录为当前目录
current_dir=$(pwd)
# 主循环
while true; do
# 显示可用命令并等待用户选择
echo "可用命令:dir, cd, wcd, create, delete, rename, newdir, deldir, exit"
read -p "请输入命令: " command
# 执行用户选择的命令
case $command in
dir)
ls -l
;;
cd)
read -p "请输入要切换的目录: " dir
cd $dir
current_dir=$(pwd)
;;
wcd)
echo "当前工作目录为: $current_dir"
;;
create)
read -p "请输入要创建的文件名: " filename
touch $filename
;;
delete)
read -p "请输入要删除的文件名: " filename
rm $filename
;;
rename)
read -p "请输入要重命名的文件名: " oldname
read -p "请输入新的文件名: " newname
mv $oldname $newname
;;
newdir)
read -p "请输入要创建的目录名: " dirname
mkdir $dirname
;;
deldir)
read -p "请输入要删除的目录名: " dirname
rm -r $dirname
;;
exit)
echo "已退出系统。"
exit 0
;;
*)
echo "无效命令,请重新输入。"
;;
esac
Done
current_dir=$(pwd) 保存当前目录路径。
while true 是主循环,该循环将一直运行,直到用户选择了 "exit" 命令并退出脚本。
echo "可用命令:dir, cd, wcd, create, delete, rename, newdir, deldir, exit" 显示可用命令列表。
read -p "请输入命令: " command 等待用户输入命令。
case $command in ... esac 根据用户输入的命令执行相应的操作。
ls -l 执行 "dir" 命令,显示当前目录下的文件和子目录。
cd $dir 执行 "cd" 命令,切换到用户指定的目录。
current_dir=$(pwd) 更新当前目录路径。
echo "当前工作目录为: $current_dir" 执行 "wcd" 命令,显示当前工作目录路径。
touch $filename 执行 "create" 命令,创建指定文件名的文件。
rm $filename 执行 "delete" 命令,删除指定文件名的文件。
mv $oldname $newname 执行 "rename" 命令,将指定文件名的文件重命名为新的文件名。
mkdir $dirname 执行 "newdir" 命令,创建指定目录名