Linux Shell编程2

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" 命令,创建指定目录名

猜你喜欢

转载自blog.csdn.net/qq_53083744/article/details/130223151