shell脚本实例:交互式修改文件内容
需积分: 1 13 浏览量
更新于2024-09-14
收藏 21KB DOCX 举报
在学习Shell编程时,一个常见的需求是通过脚本从命令行交互式地读取用户输入,然后对文件进行修改。【实例一】提供了一个具体的场景,你需要创建一个名为`lineconfig.sh`的脚本来实现以下功能:
1. 从命令行读取用户输入:在脚本中,你需要获取用户输入的行内容,这可以通过`read`命令实现。例如,`read -p "请输入第X行:" line_number input_content`,这里的`-p`选项用于打印提示信息,用户输入会被保存在`input_content`变量中。
2. 从文件中读取指定行:使用`awk`或`sed`工具,结合用户输入的行号,读取原始文件(如`test/a.txt`)中的指定行。在你的例子中,`cattest.log|awk '{if (NR == 2) print "inputline2"; getlinename < "/dev/tty"; $0 = name}'`这部分可能存在问题。`NR`是awk的内置变量,表示当前处理的行号,而`getlinename`似乎未定义。正确的做法可能是先将行号存储在变量中,再使用`getline`函数从`/dev/tty`读取行内容,然后将其赋值给相应的变量。
3. 替换文件中的指定行:使用`awk`的`{}`块来编辑行内容,然后调用`print`命令将修改后的行写回文件。如果需要用户确认修改,可以使用条件判断并加上循环,直到用户选择确认或退出。
4. 用户交互与控制流程:在脚本中,你可以使用`while`循环配合`case`语句来处理用户的输入选择。比如,`while true; do ... done`结构,用户可以选择输入回车进行确认或输入`c`键返回重试。
5. 输入验证和错误处理:确保在用户输入不正确时给出清晰的提示,并提供正确的输入格式指导。例如,检查输入是否为数字,如果不是则要求重新输入。
6. 使用`-`符号代替`/dev/tty`:`-`通常代表标准输入(stdin),但在某些上下文中,如awk中,它可能表示从输入流读取。如果你的问题在于`getlinename`函数,确认你是否需要从标准输入而不是特定设备读取行。`/dev/tty`用于实时从终端设备读取,如果不需要这种交互,则`-`符号可能更合适。
针对你的问题,Linux-OReilly-SED-and-AWK.chm中的“-”可能是指使用标准输入,而你的场景可能需要交互式的用户输入,所以使用`/dev/tty`更为合适。然而,具体如何操作取决于你的脚本设计。
以下是一个简化版的`lineconfig.sh`脚本示例,供你参考:
```bash
#!/bin/bash
# 用户输入提示
echo "请输入第2行:"
read -p "输入内容: " line2_input
# 从文件读取第2行
line2_original=$(awk -v line_num=2 'NR==line_num {print $0}' test/a.txt)
# 显示提示并获取用户输入
echo "输入新的第2行内容:"
read -p "输入内容: " new_line2
new_line2="$new_line2"
# 检查用户是否想要确认
while true; do
echo "确认修改?请输入回车继续,输入c返回重试"
read confirm
if [[ $confirm =~ ^[Cc]$ ]]; then
break
fi
done
# 替换文件内容
awk -i inplace -v old="$line2_original" -v new="$new_line2" '{if ($0 == old) {print new; next}}' test/a.txt
# 显示结果
echo "修改完成!"
cat test/a.txt
```
请根据实际需求调整这个脚本,使其满足你的具体要求。记住,Shell编程是个实践性很强的领域,多尝试和实践是提高技能的关键。
2010-07-20 上传
2017-11-30 上传
1211 浏览量
2009-12-30 上传
2014-11-24 上传
2008-07-05 上传
点击了解资源详情
点击了解资源详情
丢丢来
- 粉丝: 354
- 资源: 23
最新资源
- 高清艺术文字图标资源,PNG和ICO格式免费下载
- mui框架HTML5应用界面组件使用示例教程
- Vue.js开发利器:chrome-vue-devtools插件解析
- 掌握ElectronBrowserJS:打造跨平台电子应用
- 前端导师教程:构建与部署社交证明页面
- Java多线程与线程安全在断点续传中的实现
- 免Root一键卸载安卓预装应用教程
- 易语言实现高级表格滚动条完美控制技巧
- 超声波测距尺的源码实现
- 数据可视化与交互:构建易用的数据界面
- 实现Discourse外聘回复自动标记的简易插件
- 链表的头插法与尾插法实现及长度计算
- Playwright与Typescript及Mocha集成:自动化UI测试实践指南
- 128x128像素线性工具图标下载集合
- 易语言安装包程序增强版:智能导入与重复库过滤
- 利用AJAX与Spotify API在Google地图中探索世界音乐排行榜