其他语法

反引号``

反引号``是命令替换,命令替换是指Shell可以先执行反引号中的命令,将输出结果暂时保存,在适当的地方输出。

#!/usr/bin/env bash

PATH=`pwd`
echo $PATH

分号

使用分号(;)可以在同一行上写两个或两个以上的命令。

#!/bin/bash

 echo hello; echo there
 filename=ttt.sh
 if [ -e "$filename" ]; then # 注意: "if"和"then"需要分隔,-e用于判断文件是否存在
     echo "File $filename exists."; cp $filename $filename.bak
 else
     echo "File $filename not found."; touch $filename
 fi; echo "File test complete."

单引号

'STRING' 将会阻止STRING中所有特殊字符的解释

#!/bin/bash

echo $HOME
echo "$HOME"
echo '$HOME'

结果:
/c/Users/Administrator
/c/Users/Administrator
$HOME

小括号()

在 Linux 的 Shell 脚本中,圆括号 () 用于多种不同的目的。以下是一些常见的用法和示例:

1. 子Shell

圆括号可以用来创建子Shell。在子Shell 中执行的命令不会影响到父Shell 环境中的变量和设置。

示例

#!/bin/bash

echo "Before: $VAR"

( 
  VAR="Changed in subshell"
  echo "Inside subshell: $VAR"
)

echo "After: $VAR"

执行脚本

bash script.sh

输出

Before: 
Inside subshell: Changed in subshell
After:

在这个示例中,VAR 在子Shell 中被修改,但这种修改不会影响到父Shell 中的 VAR

2. 命令分组

圆括号还可以用来将多个命令分组在一起。所有这些命令将在同一个子Shell 中执行。

示例

#!/bin/bash

(
  echo "First command"
  echo "Second command"
) > output.txt

在这个示例中,First commandSecond command 都会被写入到 output.txt 文件中,因为它们在一个子Shell 中执行,并且输出被重定向到文件。

3. 数组定义

在 Bash 中,圆括号用于定义数组。

示例

#!/bin/bash

my_array=(one two three four)

echo "First element: ${my_array[0]}"
echo "Second element: ${my_array[1]}"

执行脚本

bash script.sh

输出

First element: one
Second element: two

4. 执行命令并返回其状态

圆括号还可以用来运行命令并将其返回值用于其他操作。例如,使用 $(command) 语法来捕获命令的输出并将其作为变量的值。

示例

#!/bin/bash

current_date=$(date)
echo "Current date and time: $current_date"

执行脚本

bash script.sh

输出

Current date and time: [当前日期和时间]

5. 测试条件

在 Bash 中,圆括号也用于在 [[ ... ]] 中测试条件,特别是在复合条件和逻辑操作中。

示例

#!/bin/bash

if [[ ( -d /tmp ) && ( -w /tmp ) ]]; then
  echo "/tmp is a writable directory"
else
  echo "/tmp is not a writable directory"
fi

中括号

条件测试表达式放在[ ]中。下列中的-lt (less than)表示小于号:

a=5
if [ $a -lt 10 ]
then
    echo "a: $a"
else
    echo "a>10"
fi
# result: a: 5

流程控制

if语句:

if condition
then
    command1 
    command2
    ...
    commandN 
fi

if-elif-else语法格式:

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

for循环:

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

while语句:

#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done