1. 管道(|):将一个命令的输出传递给另一个命令作为输入。例如:
command1 | command2
在这个命令中,command1
的输出会作为 command2
的输入,直接将一个命令的输出传递给另一个命令进行处理. 你可以使用 grep
来查找关键词,然后使用 wc -l
来统计行数:
grep "keyword" test_file.txt | wc -l
2. 重定向(>、>>、<):用于将命令的输出重定向到文件或从文件读取输入。例如:
command > file.txt # 将输出写入文件
command >> file.txt # 将输出追加到文件
command < file.txt # 从文件中读取输入1. >: 将命令的标准输出重定向到文件,如果文件不存在则创建,如果文件存在则覆盖文件内容。象下面这条命令:echo "Hello, World!" > output.txt
它将创建一个名为 output.txt 的文件,其中包含 "Hello, World!"。
2. >>: 将命令的标准输出重定向到文件,如果文件不存在则创建,如果文件存在则追加到文件末尾。例如,如果你想将命令的输出追加到一个已存在的文件:
echo "out hello world text" >> output.txt
这将在 output.txt 文件末尾追加 "out hello world text"。
3. <: 将文件内容作为命令的标准输入。例如,如果你有一个包含输入内容的文件,你可以将其传递给命令:wc -l < input.txt
这将统计 input.txt 文件中的行数。
3. 组合命令(&&、||):在一行中执行多个命令,根据前一个命令的成功或失败来决定是否执行后一个命令。例如:
command1 && command2 # 只有在command1成功时才执行command2
command1 || command2 # 只有在command1失败时才执行command2
&&: 如果前一个命令成功执行(返回退出状态码为0),则执行下一个命令。例如,如果你想在成功创建一个文件后输出成功消息:touch myfile.txt && echo "File created successfully."
上述命令首先尝试创建文件 myfile.txt,如果成功,则执行 echo 命令输出成功消息。||: 如果前一个命令未成功执行(返回退出状态码不为0),则执行下一个命令。例如,如果你想检查文件是否存在,如果不存在则创建它:[ -f myfile.txt ] || touch myfile.txt
上述命令使用条件测试 [ -f myfile.txt ] 来检查文件是否存在,如果文件不存在,则执行 touch 命令创建文件。这些命令组合使得可以根据前一个命令的执行结果来选择执行下一个命令,从而实现一些灵活的脚本逻辑。
4. 后台执行(&):将命令放在后台执行,不阻塞终端,允许你继续输入其他命令。例如:
command &
假设你有一个长时间运行的任务 long_running_task.sh,你可以将其放在后台执行,而不等待它完成:./long_running_task.sh &
这样,你可以继续在终端中输入其他命令,而不必等待 long_running_task.sh 完成。需要注意的是,一旦你在后台执行一个命令,它将不再在当前终端中显示输出。如果你希望查看后台任务的输出,可以将输出重定向到文件中:./long_running_task.sh > output.log &
这将把任务的输出写入名为 output.log 的文件中。
5. 命令替换 $(command):将一个命令的输出嵌入到另一个命令中。例如:
echo "Today is $(date)"
在这个例子中,date
命令的输出将被嵌入到 echo
命令中,从而显示包含当前日期的文本。
6. 反斜杠转义(\):用于在命令中转义特殊字符,使其不被解释。例如:
echo "This is a line with a \n newline character."
在这个例子中,\n 表示一个新行字符。但是由于反斜杠的存在,Shell 不会将其解释为一个新行,而是将其作为普通字符输出。因此,上述命令将输出:This is a line with a \n newline character.
而不是在字符 \n 处换行。这种转义机制允许你在命令中使用特殊字符,而不让Shell将其解释为其原始含义。其他常见的需要转义的字符包括空格、$、*等