shell中 << EOF 和 EOF 使用

香吧香發表於2023-12-29

轉載請註明出處:

  EOF(End of File)在Shell中通常用於指示輸入的結束,並在指令碼或命令中進行多行輸入。它允許使用者指定一個特定的分界符來表示輸入的結束,通常用於建立臨時檔案、重定向輸入或在指令碼中提供多行輸入。

  EOF允許使用者指定一個特定標記,在其之後輸入的所有文字都被當作輸入,直到再次看到該標記為止。這使得在Shell中進行多行輸入變得簡單且直觀。

使用方法

  在shell中,EOF通常與Here文件結合使用。Here文件是一種將多行輸入傳遞給命令或指令碼的方法,而EOF則用於指示輸入的結束。

  下面是EOF的一些使用場景及示例說明:

1.重定向輸入到命令

cat << EOF
This is a multi-line input
Using EOF in shell
to indicate the end of input
EOF

  這裡,cat命令將讀取Here文件中的多行輸入,直到遇到EOF為止。

2.在指令碼中使用EOF

#!/bin/bash
echo "Starting the script"
# Commands here
cat << EOF
This is a multi-line input
Within a shell script
EOF
# More commands
echo "Script finished"

  在這個例子中,EOF用於在指令碼中提供多行輸入。

3.建立臨時檔案

cat > file.txt << EOF
This is the content of the file
It spans multiple lines
EOF

  這裡,cat命令將把Here文件中的內容重定向到file.txt檔案中,直到遇到EOF為止。

4.使用多個Linux shell命令列的示例:

cat << EOF
This is a multi-line input
Using multiple shell commands within Here document:
$(ls -l)
$(echo "Hello, world!")
EOF

  在這個示例中,ls -lecho "Hello, world!"是兩個不同的Linux shell命令。當Here文件中包含$(...)時,其中的內容會被解釋並執行。因此,在此示例中,在Here文件中執行了ls -l以及echo "Hello, world!"這兩個命令。

5.shell指令碼中使用:

#!/bin/bash

# 遠端登入到伺服器
ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" root@192.168.118.30 << EOF
   # 在遠端伺服器上執行命令
   echo "Hello, World!"
   hostname -I    ##30環境配置列印
EOF
##40環境配置列印
hostname -I

  這段shell指令碼在 40 的伺服器節點上執行時,<< EOF 與 EOF 之間的命令執行是 在 前面ssh 的 192.168.118.30 的伺服器節點上執行的。如果沒有 <<EOF 與 EOF ,那後面的命令解釋執行將都在shell指令碼執行的40環境。

 

相關文章