Shell脚本学习:重定向与管道操作

需积分: 10 0 下载量 181 浏览量 更新于2024-08-05 收藏 31KB DOCX 举报
"这篇文档是关于shell脚本的编写总结,涵盖了文件重定向、命令输出、错误处理、管道、变量以及脚本中的日期处理等基础知识。" 在shell脚本编程中,文件重定向是一个关键概念,它允许我们将命令的输出或错误流导向不同的文件。标准输入(stdin)通常是0,标准输出(stdout)是1,标准错误(stderr)是2。例如,`command1>out.txt 2>error.txt`会将`command1`的正常输出重定向到`out.txt`,错误输出则会被重定向到`error.txt`。如果只写`command>out.txt 2>error.txt`,则会同时重定向stdout和stderr到`out.txt`。 为了将两个流合并到同一个文件,可以使用追加操作符`>>`,如`command>>out_err.txt 2>>out_err.txt`。这会将命令的输出和错误都追加到`out_err.txt`。另一种方式是`command>out_err.txt 2>&1`,这里`2>&1`意味着将错误输出重定向到与标准输出相同的描述符,即同一个文件。 管道`|`是另一个重要的重定向工具,它可以把一个命令的stdout作为另一个命令的stdin。例如,`grep Hello text_file.txt`会在`text_file.txt`中查找“Hello”字符串。当用管道连接`fdisk -l | grep "Disk/dev"`时,`fdisk -l`的输出被`grep`命令接收作为输入。 在shell脚本中,变量的使用非常常见。在Bash shell里,我们可以使用`$`符号来引用变量,比如`read phone`会读取用户输入并赋值给变量`phone`。接着,`echo “$phone/$name/$issue” >> data.txt`会将这些变量的值追加到`data.txt`文件中。 为了在脚本中添加当前日期,可以使用`date`命令,格式化选项`+%Y-%m-%d%H:%M:%S`会输出形如“年-月-日 时:分:秒”的时间戳。通过反引号`(`)包裹`date`命令,可以将其结果赋值给变量,如`now=$(date "+%Y-%m-%d%H:%M:%S")`。 下面是一个完整的示例脚本: ```bash #!/bin/bash now=$(date "+%Y-%m-%d%H:%M:%S") echo "Phonenumber?" read phone echo "Name?" read name echo "Issue?" read issue echo "$phone/$name/$issue $now" >> data.txt ``` 这个脚本会询问电话号码、姓名和问题,然后将这些信息连同当前时间一起写入`data.txt`。使用`tail -2 note.sh`可以查看脚本的最后两行代码,涉及读取问题和追加数据到文件的部分。