shell练习题目1.0

编写一个脚本,接收一个目录作为参数,并统计该目录下的文件数量和目录数量。(知识点:命令行参数的获取、循环、条件判断、文件类型判定、计数器的使用)

#!/bin/bash

# 检查是否传入目录参数
if [ $# -ne 1 ]; then
  echo "请传入一个目录作为参数。"
  exit 1
fi

# 获取目录参数
directory=$1

# 检查目录是否存在
if ! [ -d $directory ]; then
  echo "目录不存在。"
  exit 1
fi

# 统计文件数量和目录数量
file_count=0
dir_count=0

# 遍历目录下的所有文件和目录
for entry in $directory/*; do
  if [ -f $entry ]; then
    ((file_count++))
  elif [ -d $entry ]; then
    ((dir_count++))
  fi
done

# 输出统计结果
echo "目录中的文件数量:$file_count"
echo "目录中的目录数量:$dir_count"

解析:
1) / 是目录符号;\是转义符号;
2) [ ]中括号中,需要有两个空格,再向里面写东西;

老铁这个很值得看啊:文章链接

编写一个脚本,遍历一个目录下的所有文件,并将文件名输出到一个文本文件中。(知识点:目录遍历、文件的输出操作、重定向。)

#!/bin/bash

# 检查是否传入目录参数
if [ $# -ne 1 ]; then
  echo "请传入一个目录作为参数。"
  exit 1
fi

# 获取目录参数
directory=$1

# 检查目录是否存在
if ! [ -d $directory ]; then
  echo "目录不存在。"
  exit 1
fi

# 遍历目录下的所有文件并仅输出文件名到文本文件
output_file="file_names.txt"

# 清空现有的输出文件
> $output_file

# 使用 find 命令进行遍历并仅输出文件名
find $directory -type f -exec basename {} \; >> $output_file

echo "文件名列表已输出到 $output_file 文件中。"

解析:

find $directory -type f -exec basename {} ; >> $output_file 这句代码使用了 find 命令和 basename 命令来遍历目录并输出文件名。

1.find: 命令用于在目录层次结构中搜索文件和目录。
2.$directory: 是脚本中获取的目录参数,表示要进行遍历的目录路径。
3.-type f: 是 find 命令的参数,表示只搜索普通文件(排除目录、符号链接等其他文件类型)。
4.-exec: 是 find 命令的选项,用于在找到每个文件时执行指定的命令。
5.basename {}: 是 -exec 选项后要执行的命令。{} 表示当前找到的文件的路径,而 basename 命令用于获取文件名部分。
6."\;": 是 -exec 选项的结束标志,告诉 find 命令该命令已经结束
7.>> $output_file: 使用重定向操作符 >>,将 find 命令的输出追加到指定的文件中(此处为 $output_file)。

这条命令的作用是将指定目录下的每个文件路径通过 basename 命令获取文件名部分,并将文件名追加输出到 $output_file 文件中。
在命令中,; 的反斜杠 \ 是用于对分号 ; 进行转义的。这是因为分号在Shell中有特殊含义,表示命令的结束。为了避免分号被解释为Shell语法的一部分,我们使用反斜杠进行转义,告诉Shell将其作为普通字符对待。
综合起来,这句命令的作用是通过 find 命令遍历指定目录下的所有文件,并通过 basename 命令获取文件名部分,最后将仅包含文件名的输出追加到 $output_file 文件中。

如果使用for entry in $dir_path/* 再向目标文件输出,依然会是全部名称(即包括路径)

编写一个脚本,接收一个数字作为参数,并判断该数字是奇数还是偶数。(知识点:命令行参数的获取、条件判断、算术运算。)

主要是考察正则表达式和[[ ]]双层中括号的理解,还有接受input的循环条件
代码:

#!/bin/bash

while true; do
  # 接收用户输入的数字
  echo "请输入一个数字(输入\":q\"退出): "
  read input
  
  # 检查用户是否输入 ":q",如果是,则退出脚本
  if [ "$input" = ":q" ]; then
    echo "已退出程序。"
    exit 0
  fi
  
  # 检查输入是否是数字
  if ! [[ "$input" =~ ^[0-9]+$ ]]; then
    echo "请输入一个有效的数字!"
    continue
  fi
  
  # 将输入的字符串转换为整数
  number=$((input))
  
  # 使用算术运算符对数字进行求余
  remainder=$((number % 2))
  
  # 判断数字是奇数还是偶数
  if [ $remainder -eq 0 ]; then
    echo "$number 是偶数。"
  else
    echo "$number 是奇数。"
  fi
done

正则表达式:^[ 0 - 9 ]+$

^ 表示匹配字符串的开始位置。
[0-9] 表示匹配一个数字字符,范围是从 0 到 9。
+表示匹配前面的模式(即数字字符)一次或多次。
$ 表示匹配字符串的结束位置。
简单来说,该正则表达式匹配一或多个数字字符,并检查整个字符串是否仅由数字字符组成,没有其他额外的字符。

代码解析:

[[ “$input” =~ ^[0-9]+$ ]] 使用双方括号 [[]] 来进行条件判断,并使用 =~ 运算符进行正则匹配。
如果用户输入的字符串 i n p u t 能够与正则表达 式 [ 0 − 9 ] + input 能够与正则表达式 ^[0-9]+ input能够与正则表达[09]+ 匹配,即仅包含数字字符,则条件为真。
! 用于对条件进行取反,因此 ! [[ " i n p u t " =   [ 0 − 9 ] + input" =~ ^[0-9]+ input"= [09]+ ]] 表示用户输入的字符串不符合纯数字的要求。
如果条件为真(即用户输入不是有效的数字),则输出提示信息并使用 continue 跳过本次循环,继续等待用户输入。
通过以上机制,这段代码可以确保用户输入的内容是一个有效的数字,而不是其他字符或字符串,以确保后续的输入能正确地进行奇偶数的判断。

编写一个脚本,接收一个字符串作为参数,并将该字符串反转输出。(知识点:命令行参数的获取、字符串操作、循环、数组的使用。)

#!/bin/bash

# 检查是否传入参数
if [ $# -eq 0 ]; then
    echo "请提供一个字符串作为参数。"
    exit 1
fi

# 读取输入的字符串
input="$1"

reversed=""
length=${#input}

# 逆向遍历字符串并构建反转后的字符串
for (( i=$length-1; i>=0; i-- )); do
    reversed="$reversed${input:$i:1}"
done

# 输出反转后的字符串
echo "反转后的字符串为: $reversed"

这个主要考察的是字符串的拼接,字符串的长度提取,还有变量的另一种提取形式

在这里插入图片描述

编写一个脚本,检查系统中是否安装了某个软件,并输出安装状态。(知识点:命令执行、条件判断、输出结果的处理。)

编写一个脚本,接收一个数字作为参数,并计算该数字的阶乘。(知识点:命令行参数的获取、循环、变量的使用。)

编写一个脚本,统计一个文本文件中每个单词出现的次数。(知识点:文件读取、字符串操作、循环、数组或关联数组的使用。
)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值