shell 是用于侦听用户输入指令的工具,其接受到这些指令,然后执行相应的操作;shell是一种计算语言,主要用于脚本维护。

我们可以通过以下方式查看当前PC支持的shell

1
2
[root@localhost test]# ls /bin/*sh
/bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh

查看当前系统所使用shell

1
2
[root@localhost test]# echo $SHELL
/bin/bash

shell 开发流程

创建shell脚本文件

1
touch 01_hello.sh

打开脚本文件

1
vim 01_hello.sh

实现

1
2
#!/bin/bash		//表示以下所有的所有的指令都通过bash来解析
echo "hello world" //表示输出语句

指定可执行权限

1
chmod 755 01_hello.sh

执行

1
./01_hello.sh

shell 环境

shell的变量是没有类型的,但是有环境变量和局部变量之分

环境变量

即全局变量,可以被当前shell或者子shell访问;

查看环境变量

env

定义环境变量

export a=hello

访问变量值

${variable_name}

局部变量

局部变量只能被当前的shell所访问

查看局部变量

set

定义局部变量

b=123

访问变量

${variable_name}

算术运算符

+ - * / %

format

$[$variable_name + $variable_name]

shell 语句格式

输出语句

format

echo [option] "hello"

option

  • -n : 表示不换行

输入语句

format

read [option] variable_name

option

  • -p : 表示显示提示信息
  • -s : 表示以非显式方式接受输入
  • -n : 表示指定接受字符个数
  • -t : 表示超时时间(秒)

if 语句

format

1
2
3
4
5
6
if [ condition ]
then
operation
else
operation
fi

嵌套

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if [ condition ]
then
if [ condition ]
then
....
else
....
fi
....
elif [ condition ]
then
....
else
....
fi
....
fi

配合其它命令

format

1
2
3
4
5
if cmd
then
cmd
fi

example

1
2
3
4
if mount 192.168.0.254:/example &> /dev/null
then
echo "Successfully mounted"
fi

case 语句

format

1
2
3
4
5
6
7
8
9
10
11
12
case $variablename in
value1)
cmd
;;
value2)
cmd
;;
....
*)
cmd_fault
;;
esac

运算

关系运算符

- 数学表示 shell格式
大于 > -gt
小于 < -lt
等于 = -eq
大于等于 >= -ge
小于等于 <= -le
### 逻辑运算符
- 格式一 格式二
&& -a
|| -o
!
#### format
1
2
3
[[ con1 && con2 && ... && ... ]]        //格式1
[ con1 ] && [ con2 ] && ... && [ ... ] //格式2
[ con1 -a con2 -a ... -a ... ] //格式3
### 数学计算格式
$[$var1 * $var2 + 1]

字符串比较

格式 意义
-n STRING 判断字符串是非空
-z STRING 判断字符串为空
STRING1 = STRING2 判断相等
STRING1 != STRING2 判断不等

for 循环

format

for循环主要有以下两种格式
一种是C语言式的for循环

1
2
3
4
for ((i = 0; i < 100; ++i))
do
cmd
done

还有一种是for_in式的

1
2
3
4
for varname in `seq 1 1 100` //第一个1是初始值,第二个1是步进值,第三个是终值
do
cmd
done

while 循环

format

1
2
3
4
5
6
i = 0 	//初始化
while [ condition ] //条件部分
do
cmd //循环体
let i++ //自增或者自减
done

死循环

死循环要配合延迟函数和退出条件使用

sleep

用于表示延迟以秒为单位的时间

usleep

用于表示延迟以微秒为单位的时间

break

退出整个循环,只在当前循环中起作用,不可以跨层退出

continue

跳过本次循环,进入下次循环,只对当前循环起作用,不可以深层退出

函数

format

1
2
3
4
function funname()
{
body
}
1
2
3
4
funname()
{
bbody
}







  • end