【问题标题】:How to find a file in a directory while in bash script without using find command如何在不使用 find 命令的情况下在 bash 脚本中查找目录中的文件
【发布时间】:2020-01-21 20:32:26
【问题描述】:

我目前有两个 bash 脚本,assign1.bash 和 read.bash,以及一个名为 data 的目录(其中包含包含课程信息的 txt 文件)。 assign 1 创建一个菜单并询问您是否要读取文件,如果选择它会执行 ./read.bash

read.bash 提示用户输入课程代码和课程编号 然后它检查文件是否存在于数据目录中,如果存在,它将逐行读取并打印出读取的值。如果不存在,则仅打印错误。

我的代码当前检查是否找到了该文件,然后它有一个空行,在按 Enter 5 次后它会打印但只有一个值。

我尝试使用以下方法获取输入并在数据目录中创建我要查找的文件名: course_file=data"${dept_code^^}$course_num".crs

但这会导致空白行

#!/bin/bash

  #need an if statement here to check if the course exists
  read -p "Enter a department code and course number:" dept_code course_num
  course_file=data/"${dept_code^^}$course_num".crs
  if [[ -f "$course_file" ]]; then
    read dept_code dept_name
    read course_name
    read course_sched course_start course_end
    read course_hours
    read course_size


  else
    echo "ERROR: course not found"
  fi
    echo "Course department: $dept_code $dept_name"
  echo "Course number: $course_num"
  echo "Course name: $course_name"
  echo "Sheduled days: $course_sched"
  echo "Course start: $course_start"
  echo "Course end: $course_end"
  echo "Credit hours: $course_hours"
  echo "Enrolled Students: $course_size"
  assign1.bash

目录中存在的课程文件是CS3423, 所以如果用户输入:cs 3423 它应该检查它是否存在于数据中(CS3423.crs 存在于数据目录中)然后逐行读取信息并获取声明的变量

然后它应该打印出以下内容:

Course number: 3423
Course name: Systems programming
Sheduled days: MWF
Course start: 7/20/19
Course end: 10/20/19
Credit hours: 3
Enrolled Students: 43

然后返回到assign1.bash中的原始提示,这是一个询问您是否要读取文件的菜单

【问题讨论】:

  • 我忘了补充,我不允许使用 find 命令

标签: bash directory


【解决方案1】:

lsfile globbinggrep 可能是一个很好的解决方案,如果您不需要递归通过 data/ 目录结构(如 find 那样)。

您可以通过执行以下操作尝试对文件进行“模糊”匹配:

# With globbing.
$ ls data/
1234.crs 2345.crs 3456.crs
$ ls data/*23*.crs
1234.crs 2345.crs

# With grep.
$ ls data/
1234.crs 2345.crs 3456.crs
$ ls data/ | grep "23"
1234.crs
2345.crs

globbing 的优点是不涉及管道,因此它可能会快一点,但这可能可以忽略不计。

【讨论】:

  • 我怎么可能将 ls data/ globbing 添加到用于文件检查的 if 语句中?另外,你对逐行读取变量有什么建议吗?
猜你喜欢
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 2012-02-05
  • 2014-02-18
  • 1970-01-01
相关资源
最近更新 更多