OnWorks Linux 和 Windows 在线工作站

商标

工作站免费在线托管

<上一页 | 内容 | 下一页>

更完整的应用程序

经过长时间的中断,我们将恢复我们的工作 系统信息页面 程序。 我们的下一个添加将向程序添加几个命令行选项,如下所示:

输出文件。 我们将添加一个选项来指定包含程序输出的文件的名称。 它将被指定为 -f 文件 or - 文件 文件.

交互模式。 此选项将提示用户输入输出文件名,并确定指定的文件是否已存在。 如果是,则会在覆盖现有文件之前提示用户。 此选项将由以下任一者指定 -i or - 交互的.

救命。 -h or - 帮帮我 可以指定使程序输出信息性使用消息。

下面是实现命令行处理所需的代码:



用法 () {

echo "$PROGNAME: 用法:$PROGNAME [-f 文件 | -i]" 返回

}

# 处理命令行选项交互=

用法 () {

echo "$PROGNAME: 用法:$PROGNAME [-f 文件 | -i]" 返回

}

# 处理命令行选项交互=


文件名=


而 [[ -n $1 ]]; do case $1 in

-f | - 文件)

转移

文件名=$1

;;

文件名=


而 [[ -n $1 ]]; do case $1 in

-f | - 文件)


-i | --interactive) 交互=1

;;

-h | --help) 用法退出

;;

*) 用法 >&2

退出1

;;

-i | --interactive) 交互=1

;;

-h | --help) 用法退出

;;

*) 用法 >&2

退出1

;;


ESAC

转移完成

ESAC

转移完成


图片

首先,我们添加一个名为的shell函数 用法 在调用帮助选项或尝试未知选项时显示消息。

接下来,我们开始处理循环。 这个循环继续,而位置参数

$1 不为空。 在循环结束时,我们有一个移位命令来推进位置参数,以确保循环最终会终止。

在循环中,我们有一个 案件 检查当前位置参数以查看它是否与任何支持的选项匹配的语句。 如果找到支持的参数,则对其执行操作。 如果 founc 是未知选项,则会显示用法消息并且脚本会因错误而终止。

-f 参数以一种有趣的方式处理。 当检测到时,它会导致额外的 转移 发生,这会提高位置参数 $1 到提供给的文件名参数 -f 选项。

我们接下来添加代码来实现交互模式:



#交互模式


如果 [[ -n $interactive ]]; 然后虽然为真; 做

read -p "输入输出文件名:" filename if [[ -e $filename ]]; 然后

read -p "'$filename' 存在。覆盖?[y/n/q] > " case $REPLY in

Y|y) 休息

#交互模式


如果 [[ -n $interactive ]]; 然后虽然为真; 做

read -p "输入输出文件名:" filename if [[ -e $filename ]]; 然后

read -p "'$filename' 存在。覆盖?[y/n/q] > " case $REPLY in

Y|y) 休息


;;

Q|q) echo "程序终止。" 出口

;;

*) 继续

;;

ESAC

elif [[ -z $文件名]]; 然后继续

其他

打破

fi

完成

fi

;;

Q|q) echo "程序终止。" 出口

;;

*) 继续

;;

ESAC

elif [[ -z $文件名]]; 然后继续

其他

打破

fi

完成

fi


如果 互动 变量不为空,则开始无限循环,其中包含文件名提示和后续现有的文件处理代码。 如果所需的输出文件已经存在,系统会提示用户覆盖、选择另一个文件名或退出程序。 如果用户选择覆盖现有文件, 打破 执行以终止循环。 请注意如何 案件 语句仅检测用户是选择覆盖还是退出。 任何其他选择都会导致循环继续并再次提示用户。

为了实现输出文件名功能,我们必须首先将现有的页面编写代码转换为shell函数,原因稍后会变得清楚:



write_html_page () { cat <<- _EOF_

$TITLE

$TITLE

$时间戳

$(报告正常运行时间)

$(report_disk_space)

$(report_home_space)

_EOF_返回

}


# 输出html页面


如果 [[ -n $filename ]]; 然后

write_html_page () { cat <<- _EOF_

$TITLE

$TITLE

$时间戳

$(报告正常运行时间)

$(report_disk_space)

$(report_home_space)

_EOF_返回

}


# 输出html页面


如果 [[ -n $filename ]]; 然后


如果触摸 $filename && [[ -f $filename ]]; 然后 write_html_page > $filename

其他

echo "$PROGNAME: 无法写入文件 '$filename'" >&2 exit 1

其他

写_html_页面

fi

如果触摸 $filename && [[ -f $filename ]]; 然后 write_html_page > $filename

其他

echo "$PROGNAME: 无法写入文件 '$filename'" >&2 exit 1

其他

写_html_页面

fi


处理逻辑的代码 -f 选项出现在上面显示的列表的末尾。 在其中,我们测试文件名是否存在,如果找到,则执行测试以查看文件是否确实可写。 为此,一个 触摸 执行,然后进行测试以确定生成的文件是否为常规文件。 这两个测试处理输入无效路径名的情况(触摸 将失败),并且,如果该文件已经存在,则它是一个常规文件。

如我们所见, 写_html_页面 调用函数来执行页面的实际生成。 它的输出要么被定向到标准输出(如果变量 文档名称 为空)或重定向到指定的文件。


OnWorks 的顶级操作系统云计算: