📅  最后修改于: 2023-12-03 15:23:40.285000             🧑  作者: Mango
Shell是在命令行下运行的一种脚本语言,是Linux管理员必备的技能之一。在Shell脚本中,主要有一些基本的调整操作需要掌握。
变量是Shell编程中使用的基本构建块之一。我们可以使用变量来存储和操作值。
定义一个变量时,我们需要给出它的名称和值。使用等号(=)进行赋值,例如:
name="John Doe"
age=25
使用美元符号($)来获取变量的值。例如:
echo $name
echo $age
在Shell中,变量默认是字符串类型,但是我们也可以给变量赋予其他类型的值。
参数是指Shell脚本中传递给脚本的值。我们可以在脚本内部使用这些参数。
在脚本中,我们可以使用特殊的变量来获取命令行参数。这些特殊变量如下:
例如,我们运行以下脚本:
#!/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编程中,存在各种类型的运算符。下面是一些常用的运算符:
在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循环用于在所提供的列表或序列之间迭代。例如:
#!/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循环用于在条件为真的情况下执行相同的命令块。例如:
#!/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循环在条件为假的情况下执行相同的操作。例如:
#!/bin/bash
i=1
until [ $i -gt 5 ]
do
echo $i
i=$((i+1))
done
输出结果:
1
2
3
4
5
在Shell编程中,我们使用条件语句来测试条件并根据结果执行操作。
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语句就像多项选择语句。根据给定的条件测试,它在多个命令选项之间做出决策。例如:
#!/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