0
$0 是脚本的名称,$# 是传入的参数数量,$1 是第一个参数,$BOOK_ID 是变量BOOK_ID的内容
1
-echo
用于在命令窗口输出信息
-$()
:是命令替换的语法。$(...)
会执行括号内的命令,并将其输出捕获为一个字符串,然后赋值给变量。
-|
:管道符 |
用于将前一个命令的输出作为下一个命令的输入。
-cut
命令用于从每一行中剪切出指定的字段。
eg.cut -d':' -f1
:
-d':'
指定了字段的分隔符为冒号:
。-f1
表示提取第一个字段。- 整一行表示按:裁减,并取第一个字段
eg.假设 BOOK_INFO
的值为 2001:Python编程:张三:计算机科学
,那么BOOK_ID=$(echo $BOOK_INFO | cut -d':' -f1)
的值为 2001。
-grep
命令用于在文件中搜索匹配指定模式的行。
- -q:静默模式,不输出任何内容,只返回状态码。如果找到匹配项,返回 0(真),否则返回 1(假)。可作为条件语句的判断信息。
-read
命令用于从标准输入读取一行,并将输入的内容存储在一个或多个变量中。
- -p 选项允许你在提示用户输入时显示一条消息。这条消息会出现在同一行上,等待用户输入。
eg.read -p "确认要删除书号为 $BOOK_ID 的书籍吗?(y/n): " CONFIRM
-sed
是一个流编辑器,用于对文件进行文本转换。
-i
选项表示直接在文件中进行修改。"/^$BOOK_ID:/d"
是一个sed
命令,用于删除文件中以指定书号开头的行。^$BOOK_ID:
匹配以书号开头的行。d
表示删除匹配的行。
2
在 Bash 脚本中,fi
和 ;;
都是用于结束特定结构的关键字。它们分别用于结束 if
语句和 case
语句中的分支。
-fi
- 用途:
fi
用于结束一个if
语句块。 - 语法:
if [ condition ]; then # 如果条件为真,执行这里的代码 elif [ another_condition ]; then # 如果另一个条件为真,执行这里的代码 else # 如果所有条件都不为真,执行这里的代码 fi
-;;
- 用途:
;;
用于结束case
语句中的一个分支。 - 语法:
case $variable in pattern1) # 如果变量匹配 pattern1,执行这里的代码 ;; pattern2) # 如果变量匹配 pattern2,执行这里的代码 ;; *) # 如果变量不匹配任何模式,执行这里的代码 ;; esac
-esac
- 用途:
esac
用于结束case
语句快。 - 语法:
case $variable in pattern1) # 如果变量匹配 pattern1,执行这里的代码 ;; pattern2) # 如果变量匹配 pattern2,执行这里的代码 ;; *) # 如果变量不匹配任何模式,执行这里的代码 ;; esac
-
case
语句:case $1 in -a) # 添加书籍 ... ;; -d) # 删除书籍 ... ;; -s) # 搜索书籍 ... ;; *) # 错误参数 usage ;; esac
case
语句根据$1
的值进行分支处理。- 每个分支以
;;
结束。 esac
结束了整个case
语句。
-
嵌套的
if
语句:if grep -q "^$BOOK_ID:" "$BOOK_FILE"; then ... else ... fi
- 这些
if
语句用于检查书号是否存在,并根据结果执行不同的操作。 - 每个
if
语句块以fi
结束。
- 这些