# shell脚本

脚本执行的过程信息全部打印出来

bash -x ./scmChannelConfMonitor.sh > tmp 2>&1
1

# 脚本的首行特殊注释

#!/bin/bash 是脚本文件中的特殊注释,称为"shebang"(也叫"hashbang"或"pound-bang"),它在脚本执行时指定要使用的解释器。

在这个例子中,#!/bin/bash 表示脚本应该使用 Bash 解释器来执行。当你运行这个脚本时,操作系统会查看这个 shebang 行,并选择正确的解释器来执行脚本。

例如,如果你的脚本使用 Python 编写,你可以使用 #!/usr/bin/python,这样系统就会使用 Python 解释器来执行脚本。

这一行的存在是为了确保脚本在不同系统上都能够正确执行,因为不同系统可能默认使用不同的解释器。

# 判断字符串相等

在Shell脚本中,你可以使用[ ][[ ]] 来进行字符串相等的判断。下面是一些示例:

  1. 使用 [ ] 进行字符串相等判断:

    #!/bin/bash
    
    str1="Hello"
    str2="World"
    
    if [ "$str1" = "$str2" ]; then
        echo "字符串相等"
    else
        echo "字符串不相等"
    fi
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
  2. 使用 [[ ]] 进行字符串相等判断:

    #!/bin/bash
    
    str1="Hello"
    str2="World"
    
    if [[ "$str1" == "$str2" ]]; then
        echo "字符串相等"
    else
        echo "字符串不相等"
    fi
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

请注意:

  • [ ] 中,= 是用于字符串比较的,而在 [[ ]] 中,== 也可以用于字符串比较。
  • 在使用 [ ] 进行字符串比较时,变量两边需要用引号括起来,以防止变量为空时产生错误。

选择使用 [[ ]] 是因为它更灵活且通常在脚本中更推荐使用。

# 循环输出近30天日期

你可以使用Shell脚本中的循环结构和日期命令来实现输出最近30天的日期。以下是一个简单的例子,使用Bash来完成这个任务:

#!/bin/bash

# 获取当前日期
current_date=$(date +"%Y-%m-%d")

# 循环输出最近30天的日期
for ((i = 0; i < 30; i++)); do
  date_to_print=$(date -d "$current_date - $i days" +"%Y-%m-%d")
  echo $date_to_print
done
1
2
3
4
5
6
7
8
9
10

你可以将这个脚本保存为文件(比如 date_loop.sh),然后通过运行 bash date_loop.sh./date_loop.sh 执行它。脚本将从当前日期开始,循环输出最近30天的日期。

# 循环输出字符串数组

在Shell脚本中,你可以使用for循环来遍历一组字符串。以下是一个简单的例子:

#!/bin/bash

# 一组字符串
strings=("apple" "banana" "orange" "grape")

# 遍历字符串数组
for fruit in "${strings[@]}"; do
    echo $fruit
done
1
2
3
4
5
6
7
8
9

在这个例子中,strings是包含一组字符串的数组,然后使用for循环逐个输出数组中的字符串。你可以根据需要修改字符串数组和执行的操作。

# $?的含义

在Shell脚本中,$? 是一个特殊变量,用于获取上一个命令的退出状态(返回值)。通常,0 表示成功,而非零值表示失败。

例如:

#!/bin/bash

ls non-existent-directory

# 获取上一个命令的退出状态
exit_status=$?

if [ $exit_status -eq 0 ]; then
    echo "命令执行成功"
else
    echo "命令执行失败,退出状态: $exit_status"
fi
1
2
3
4
5
6
7
8
9
10
11
12

在这个例子中,ls non-existent-directory 是一个会失败的命令,因为目录不存在。执行后,$? 将包含上一个命令的退出状态。你可以使用这个值进行条件判断,以确定命令是否成功执行。

# 脚本判断参数是否存在

你可以使用条件语句来检查脚本执行时是否提供了特定的参数。以下是一个简单的Shell脚本示例,演示如何检查参数是否存在:

#!/bin/bash

# 检查参数是否存在
if [ -z "$1" ]; then
    echo "请提供第一个参数"
else
    # 使用第一个参数
    echo "第一个参数是: $1"
fi
1
2
3
4
5
6
7
8
9

在这个例子中,-z选项用于检查字符串是否为空。如果 $1 是空的(即没有提供第一个参数),则输出提示信息,否则使用提供的参数。

你可以根据需要修改脚本以检查更多的参数。例如,使用 $# 获取参数的数量,然后根据数量进行相应的处理。

# 判断文件是否存在

在Shell脚本中,你可以使用条件语句来判断文件是否存在。以下是一个简单的示例:

#!/bin/bash

file_path="/path/to/your/file.txt"

# 判断文件是否存在
if [ -e "$file_path" ]; then
    echo "文件存在"
else
    echo "文件不存在"
fi
1
2
3
4
5
6
7
8
9
10

在这个例子中,-e选项用于检查文件是否存在。如果文件存在,则输出"文件存在",否则输出"文件不存在"。

你可以根据需要修改file_path变量的值以及条件语句中使用的其他选项。

# 判断目录是否存在

可以使用条件语句来判断目录是否存在。以下是一个简单的Shell脚本示例:

#!/bin/bash

directory="/path/to/your/directory"

# 判断目录下是否存在文件
if [ -d "$directory" ]; then
    echo "目录存在"
else
    echo "目录不存在"
fi
1
2
3
4
5
6
7
8
9
10

在这个例子中,-d命令用于检查目录是否存在。

请确保将/path/to/your/directory替换为你要检查的目录的实际路径。

# 判断目录下是否存在文件

可以使用条件语句来判断目录下是否存在文件。以下是一个简单的Shell脚本示例:

#!/bin/bash

directory="/path/to/your/directory"

# 判断目录下是否存在文件
if [ "$(ls -A $directory)" ]; then
    echo "目录不为空,存在文件"
else
    echo "目录为空,没有文件"
fi
1
2
3
4
5
6
7
8
9
10

在这个例子中,ls -A命令用于列出目录中的文件。通过将其放入条件语句中,我们可以检查是否有文件存在。如果目录不为空,则输出"目录不为空,存在文件",否则输出"目录为空,没有文件"。

请确保将/path/to/your/directory替换为你要检查的目录的实际路径。

# 判断目录存在且不为空

#!/bin/bash

directory="/path/to/your/directory"

# 判断目录下是否存在文件
if [ -d "$directory" ] && [ "$(ls -A $directory)" ]; then
    echo "目录存在且不为空"
else
    echo "目录不存在或者无文件"
fi
1
2
3
4
5
6
7
8
9
10

# 获取脚本参数

在Shell脚本中,你可以使用特殊变量 $1, $2, $3, ... 来获取执行脚本时传入的参数。这些变量分别表示第一个、第二个、第三个参数,以此类推。

以下是一个简单的示例:

#!/bin/bash

# 获取第一个参数
param1=$1

# 获取第二个参数
param2=$2

# 输出参数
echo "第一个参数: $param1"
echo "第二个参数: $param2"
1
2
3
4
5
6
7
8
9
10
11

当你运行这个脚本时,可以通过命令行传递参数:

./your-script.sh arg1 arg2
1

在这个例子中,$1 将获取值 "arg1",$2 将获取值 "arg2"。你可以根据实际需要在脚本中使用这些参数。