Shell命令学习

How To Shell ?

if 判断

在Shell脚本中,可以使用 if语句进行条件判断。if语句的基本结构如下:

1
2
3
4
5
6
if [ condition ]
then
# 执行条件为真时的操作
else
# 执行条件为假时的操作
fi

在上述代码中,condition是一个表达式,根据其结果(真或假),决定执行哪个代码块。如果 condition为真,则执行 then块中的代码;如果 condition为假,则执行 else块中的代码(如果有)。

下面是一些常见的条件表达式及其使用方法:

  1. 字符串比较:

    • -z string:如果字符串为空,则为真。
    • -n string:如果字符串不为空,则为真。
    • string1 = string2:如果两个字符串相等,则为真。
    • string1 != string2:如果两个字符串不相等,则为真。
  2. 数值比较:

    • num1 -eq num2:如果num1等于num2,则为真。
    • num1 -ne num2:如果num1不等于num2,则为真。
    • num1 -lt num2:如果num1小于num2,则为真。
    • num1 -gt num2:如果num1大于num2,则为真。
    • num1 -le num2:如果num1小于或等于num2,则为真。
    • num1 -ge num2:如果num1大于或等于num2,则为真。
  3. 文件/目录判断:

    • -e file:如果文件/目录存在,则为真。
    • -f file:如果文件存在且为普通文件,则为真。
    • -d directory:如果目录存在,则为真。

下面是一个简单的示例,演示如何在Shell中使用 if语句进行条件判断:

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

number=42

if [ $number -eq 42 ]
then
echo "The number is 42."
else
echo "The number is not 42."
fi

在上述示例中,如果 $number的值等于42,则输出”The number is 42.”,否则输出”The number is not 42.”。

请注意,Shell中的条件表达式要用方括号 []括起来,并且每个表达式的左右两侧都要有空格。另外,thenelse之后需要用换行符或分号 ;分隔。

case 跳转

在Shell脚本中,case语句用于根据变量的不同取值执行不同的操作。case语句的基本结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
case variable in
pattern1)
# 如果 variable 匹配 pattern1,则执行对应操作
;;
pattern2)
# 如果 variable 匹配 pattern2,则执行对应操作
;;
pattern3)
# 如果 variable 匹配 pattern3,则执行对应操作
;;
*)
# 如果 variable 不匹配任何 pattern,则执行默认操作
;;
esac

在上述代码中,variable是需要进行匹配的变量,pattern是要匹配的模式,;;表示一个模式匹配结束,*表示默认情况下的操作。

下面是一个示例,演示如何在Shell中使用 case语句:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash

fruit="apple"

case $fruit in
"apple")
echo "It's an apple."
;;
"banana")
echo "It's a banana."
;;
"orange")
echo "It's an orange."
;;
*)
echo "It's an unknown fruit."
;;
esac

在上述示例中,根据 $fruit的取值,case语句会匹配相应的模式,并执行对应的操作。如果 $fruit是”apple”,则输出”It’s an apple.”;如果 $fruit是”banana”,则输出”It’s a banana.”;如果 $fruit是”orange”,则输出”It’s an orange.”;如果 $fruit不匹配任何模式,则输出”It’s an unknown fruit.”。

请注意,在每个模式结束时,需要使用 ;;表示匹配结束,以确保只执行对应的操作块。最后,esac表示 case语句的结束。

read 读取

在Shell脚本中,read命令用于从标准输入(通常是键盘)读取用户输入,并将输入的值赋给一个或多个变量。read命令的基本语法如下:

1
read [options] variable1 variable2 ...

在上述语法中,variable1variable2等是要接收输入值的变量名。当用户输入完成后,read命令将输入值赋给这些变量。

以下是一些常用的 read命令选项:

  • -p prompt:显示一个提示符 prompt,然后等待用户输入。
  • -s:静默模式,用户输入时不显示在屏幕上,用于处理密码等敏感信息。
  • -t timeout:设置超时时间(秒),如果用户在指定的超时时间内未输入,则 read命令会退出。

下面是一个简单的示例,演示如何在Shell中使用 read命令:

1
2
3
4
5
6
7
8
9
#!/bin/bash

echo "Please enter your name:"
read name

echo "Please enter your age:"
read age

echo "Hello, $name! You are $age years old."

在上述示例中,首先显示提示信息,要求用户输入姓名。然后,read命令将用户输入的值赋给变量 name。接着,显示另一个提示信息,要求用户输入年龄。再次使用 read命令将用户输入的值赋给变量 age。最后,脚本会输出类似于”Hello, John! You are 30 years old.”的消息,其中 $name$age会被用户输入的值替换。

当脚本执行到 read命令时,它会等待用户输入,并在用户按下回车键后继续执行下一条命令。

echo 输出

在Shell脚本中,echo命令用于在终端上输出文本或变量的值。echo命令的基本语法如下:

1
echo [options] [string]

在上述语法中,string是要输出的文本或变量。echo命令会将该文本或变量的值显示在终端上。

以下是一些常用的 echo命令选项:

  • -n:不输出行末的换行符,即不换行。
  • -e:启用特殊字符的解析。例如,可以使用 \n表示换行符、\t表示制表符等。

下面是一些示例,演示了在Shell中使用 echo命令的不同用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash

# 输出文本
echo "Hello, World!"

# 输出变量的值
name="John"
echo "My name is $name."

# 不换行输出
echo -n "This is "
echo "a single line."

# 解析特殊字符
echo -e "Line 1\nLine 2\tTabbed"

在上述示例中,echo命令用于输出不同的信息。第一个 echo语句输出字符串”Hello, World!”。第二个 echo语句输出变量 $name的值,结果为”My name is John.”。第三个 echo语句使用了 -n选项,不会在输出之后换行,而是继续输出下一个 echo语句的内容。最后一个 echo语句使用了 -e选项,并在字符串中使用了特殊字符 \n表示换行和 \t表示制表符,输出两行文本和一个制表符。

需要注意的是,当输出字符串包含变量时,可以使用双引号或不使用引号。双引号将允许解析变量的值,而不使用引号将直接将变量和文本拼接输出。

这就是在Shell中使用 echo命令输出文本或变量的基本方法。如有任何进一步的问题,请随时提问。

exit 1 非零状态[yi’chang]退出

在Shell脚本中,exit 1表示脚本以非零的状态码退出。exit命令用于终止当前正在执行的Shell脚本,并指定一个退出状态码。

在Unix和类Unix系统中,退出状态码是一个用于表示脚本执行结果的整数值。按照约定,如果脚本成功执行并且没有错误,退出状态码为0。非零的退出状态码通常表示脚本执行过程中发生了错误或异常。

exit 1表示脚本以状态码1退出,它通常用于指示脚本执行失败或遇到了某种错误情况。状态码可以是从1到255的任何整数值。具体状态码的含义可以根据脚本的需要进行定义和解释。

当脚本执行到 exit 1时,它将立即终止脚本的执行,并将状态码1返回给调用脚本的进程。在命令行中执行脚本时,可以通过特殊变量 $?来获取最后一次执行的命令的退出状态码。

以下是一个示例,展示了在脚本中使用 exit 1的情况:

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

# 检查文件是否存在
if [ ! -f "myfile.txt" ]; then
echo "File not found."
exit 1
fi

# 执行其他操作
# ...

在上述示例中,脚本首先检查文件 myfile.txt是否存在。如果文件不存在,脚本将输出一条错误消息,并使用 exit 1退出状态码1来表示脚本执行失败。

通过使用适当的退出状态码,可以在脚本执行期间检测和处理错误情况,以便在脚本结束后能够了解脚本的执行结果。

希望这个解释对你有帮助。如果还有其他问题,请随时提问。