📜  基本调整 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:23:40.285000             🧑  作者: Mango

基本调整 - Shell-Bash

Shell是在命令行下运行的一种脚本语言,是Linux管理员必备的技能之一。在Shell脚本中,主要有一些基本的调整操作需要掌握。

变量

变量是Shell编程中使用的基本构建块之一。我们可以使用变量来存储和操作值。

定义变量

定义一个变量时,我们需要给出它的名称和值。使用等号(=)进行赋值,例如:

name="John Doe"
age=25
访问变量

使用美元符号($)来获取变量的值。例如:

echo $name
echo $age
变量类型

在Shell中,变量默认是字符串类型,但是我们也可以给变量赋予其他类型的值。

  • 字符串变量:包含文本字符串,例如:"Hello, world!"
  • 数值变量:包含数值值,例如:42
  • 数组变量:包含多个值,例如:("apple" "banana" "grape")
参数

参数是指Shell脚本中传递给脚本的值。我们可以在脚本内部使用这些参数。

参数的位置

在脚本中,我们可以使用特殊的变量来获取命令行参数。这些特殊变量如下:

  • $0:脚本名称
  • $1:第一个参数
  • $2:第二个参数
  • ...

例如,我们运行以下脚本:

#!/bin/bash

echo "The script name is: $0"
echo "The first argument is: $1"
echo "The second argument is: $2"

并执行以下命令:

$ ./script.sh arg1 arg2

输出结果:

The script name is: ./script.sh
The first argument is: arg1
The second argument is: arg2
参数数量

使用特殊变量"$#"可以获取传递给脚本的参数数量。例如:

#!/bin/bash

echo "The number of arguments is: $#"

并执行以下命令:

$ ./script.sh arg1 arg2

输出结果:

The number of arguments is: 2
运算符

在Shell编程中,存在各种类型的运算符。下面是一些常用的运算符:

  • 算术运算符:+、-、*、/、%
  • 关系运算符:-eq、-ne、-gt、-lt、-ge、-le
  • 逻辑运算符:&&、||、!
  • 字符串运算符:=、!=、-z、-n、$、##
  • 文件测试运算符:-e、-d、-f、-s、-r、-w、-x
算术运算

在Shell脚本中进行算术运算时,我们需要使用$((...))格式。例如:

#!/bin/bash

num1=5
num2=10

echo $(($num1 + $num2))
echo $(($num1 * $num2))

输出结果:

15
50
关系运算

关系运算用于比较数值,结果是布尔值。例如:

#!/bin/bash

num1=5
num2=10

if [ $num1 -eq $num2 ]
then
    echo "num1 is equal to num2"
else
    echo "num1 is not equal to num2"
fi

if [ $num1 -lt $num2 ]
then
    echo "num1 is less than num2"
else
    echo "num1 is not less than num2"
fi

输出结果:

num1 is not equal to num2
num1 is less than num2
逻辑运算

逻辑运算用于将布尔值合并。例如:

#!/bin/bash

x=5
y=10

if [ $x -eq 5 ] && [ $y -eq 10 ]
then
    echo "x is 5 and y is 10"
fi

if [ $x -eq 6 ] || [ $y -eq 10 ]
then
    echo "x is 6 or y is 10"
fi

if [ ! $x -eq $y ]
then
    echo "x is not equal to y"
fi

输出结果:

x is 5 and y is 10
x is 6 or y is 10
x is not equal to y
字符串运算

字符串运算用于比较字符串。例如:

#!/bin/bash

str1="Hello"
str2="World"

if [ $str1 = $str2 ]
then
    echo "str1 is equal to str2"
else
    echo "str1 is not equal to str2"
fi

if [ -z $str1 ]
then
    echo "str1 is empty"
else
    echo "str1 is not empty"
fi

if [ -n $str1 ]
then
    echo "str1 is not empty"
else
    echo "str1 is empty"
fi

if [ $str1 ]
then
    echo "str1 is not empty"
else
    echo "str1 is empty"
fi

输出结果:

str1 is not equal to str2
str1 is not empty
str1 is not empty
str1 is not empty
文件测试运算

文件测试运算可以测试文件的属性。例如:

#!/bin/bash

if [ -e /etc/passwd ]
then
    echo "passwd exists"
fi

if [ -d /etc ]
then
    echo "etc is a directory"
fi

if [ -f /etc/passwd ]
then
    echo "passwd is a regular file"
fi

if [ -s /etc/passwd ]
then
    echo "passwd is not empty"
fi

if [ -r /etc/passwd ]
then
    echo "passwd is readable"
fi

if [ -w /etc/passwd ]
then
    echo "passwd is writable"
fi

if [ -x /etc/passwd ]
then
    echo "passwd is executable"
fi

输出结果:

passwd exists
etc is a directory
passwd is a regular file
passwd is not empty
passwd is readable
passwd is writable
passwd is executable
循环

在Shell中,有三种循环:for、while、until。我们可以使用这些循环迭代执行相同的操作多次。

for循环

for循环用于在所提供的列表或序列之间迭代。例如:

#!/bin/bash

for i in 1 2 3 4 5
do
    echo $i
done

输出结果:

1
2
3
4
5

也可以使用seq生成整数序列:

#!/bin/bash

for i in $(seq 1 5)
do
    echo $i
done

输出结果:

1
2
3
4
5

还可以使用通配符:

#!/bin/bash

for i in *.txt
do
    echo $i
done

输出结果:

file1.txt
file2.txt
file3.txt
while循环

while循环用于在条件为真的情况下执行相同的命令块。例如:

#!/bin/bash

i=1

while [ $i -le 5 ]
do
    echo $i
    i=$((i+1))
done

输出结果:

1
2
3
4
5

还可以通过读取文件内容来执行循环:

#!/bin/bash

while read line
do
    echo $line
done < myfile.txt
until循环

until循环在条件为假的情况下执行相同的操作。例如:

#!/bin/bash

i=1

until [ $i -gt 5 ]
do
    echo $i
    i=$((i+1))
done

输出结果:

1
2
3
4
5
条件语句

在Shell编程中,我们使用条件语句来测试条件并根据结果执行操作。

if语句

if语句根据条件执行相应的命令块。例如:

#!/bin/bash

if [ 1 -eq 1 ]
then
    echo "1 is equal to 1"
fi

if [ $USER = "root" ]
then
    echo "You are root"
else
    echo "You are not root"
fi

输出结果:

1 is equal to 1
You are not root
case语句

case语句就像多项选择语句。根据给定的条件测试,它在多个命令选项之间做出决策。例如:

#!/bin/bash

fruit="apple"

case $fruit in
    "apple") echo "The fruit is an apple"
             ;;
    "banana") echo "The fruit is a banana"
              ;;
    "grape") echo "The fruit is a grape"
             ;;
    *) echo "Unknown fruit"
       ;;
esac

输出结果:

The fruit is an apple
函数

Shell函数就像小脚本,用于封装一些操作,供其他脚本调用。例如:

#!/bin/bash

function myfunc {
    echo "This is my function"
}

myfunc

输出结果:

This is my function

带参数的函数:

#!/bin/bash

function add {
    sum=$(($1 + $2))
    echo $sum
}

result=$(add 10 20)
echo $result

输出结果:

30