Linux Shell 编程

简介

  • shell程序可以认为是将 shell 命令按照控制结构组织到一个文本文件中,批量的交给shell去执行
  • 不同的 shell 解释器使用不同的 shell 命令语法
  • shell程序解释执行,不生成可以执行的二进制文件
  • 可以帮助用户完成特定的任务,提高使用、维护系统的效率
  • 了解 shell 程序可以更好的配置和使用Linux,实现自动化运维

程序结构

#! 开始,其后为使用的 shell,如 /bin/bash

# 后为程序注释

function func() {} 定义函数,func 调用函数

read varname 读取用户输入,存储到变量 varname

1
2
3
4
5
6
7
#!/bin/bash
function echoSomething()
{
echo "Hello World!"
}
echo Runing...
echoSomething

执行 shell

1
/bin/bash filename	

1
2
3
4
# 给予执行权限
chmod +x filename
# 执行执行
./filename

变量声明和使用

变量无需声明类型,可以存储不同类型的内容,大小写区分

变量 = 值

"" 表示字符串

使用变量:

1
2
3
4
a="abc def" # 等号两边不能有空格,字符串内有空格时必须使用双引号
$a # 单个字符的变量名无需 {}
${abc} # 多个字符推荐使用 {}
echo "a的变量值是$a"

单引号、双引号、倒引号

单双引号和 PHP 类似

倒引号 ` 括起来的为命令,优先执行命令后以结果取代其位置

参数(位置变量)

1
./mysh arg1 arg2 ...

在 shell 中使用 $1 表示参数1,以此类推,$0 是文件名

$* 为字符串显示的参数列表,$@ 为数组形式的参数列表,$# 为参数个数

数值计算

1
2
a=`expr 1 + 2` # 运算符两侧有空格
let a=1+2

if

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
a=1
b=2
if [ $a -eq $b ]; then
echo $a
else
echo $a $b
fi
if test $a -eq $b; then
echo $a
else
echo $a $b
fi
if [[ $a = $b ]]; then
echo $a
else
echo $a $b
fi

for

1
2
3
4
5
#!/bin/bash
for file in `ls /etc`
do
echo $file
done

while & until

1
2
3
4
5
6
7
#!/bin/bash
a=1
while [ $a -lt 10 ]
do
let a+=1
echo $a
done

until 为条件不通过时执行循环体内容,条件通过时跳出

case

1
2
3
4
5
6
7
#!/bin/bash
read num
case $num in
1) echo "Monday" ;;
2) echo "Saturday" ;;
*) echo "IDK";; #default
esac

;; 相当于 break*) 相当于 default