编写一个脚本,接收一个目录作为参数,并统计该目录下的文件数量和目录数量。(知识点:命令行参数的获取、循环、条件判断、文件类型判定、计数器的使用)
#!/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能够与正则表达式[0−9]+ 匹配,即仅包含数字字符,则条件为真。
! 用于对条件进行取反,因此 ! [[ "
i
n
p
u
t
"
=
[
0
−
9
]
+
input" =~ ^[0-9]+
input"= [0−9]+ ]] 表示用户输入的字符串不符合纯数字的要求。
如果条件为真(即用户输入不是有效的数字),则输出提示信息并使用 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"
这个主要考察的是字符串的拼接,字符串的长度提取,还有变量的另一种提取形式
编写一个脚本,检查系统中是否安装了某个软件,并输出安装状态。(知识点:命令执行、条件判断、输出结果的处理。)
编写一个脚本,接收一个数字作为参数,并计算该数字的阶乘。(知识点:命令行参数的获取、循环、变量的使用。)
编写一个脚本,统计一个文本文件中每个单词出现的次数。(知识点:文件读取、字符串操作、循环、数组或关联数组的使用。
)