更多参考菜鸟教程
1 shell脚本
1.1 shell:
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
1.2 shell 脚本
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
1.3 运行shell脚本
运行之前要确保脚本文件是可执行的,如果不是,可以添加权限
- 运行方式和可执行文件相同,输入文件的的路径即可运行
- 当执行当前目录下的脚本文件是需要使用./前缀,否则shell会搜索PATH变量的路径,而非当前路径
- 使用bash命令也可
2 变量
2.1 基础使用
注意,变量名和等号之间不能有空格。命名规则和其他语言一样。
name="xiaoming"
# 使用变量
echo $name
# 花括号可选
echo ${name}
#再次更改变量
name="haha"
echo $name
#只读变量,name之后就不可以被修改了
readonly name
#删除变量,使用unset,unset不能删除只读变量
var_name="heihei"
echo $var_name
unset var_name
echo $var_name
2.2 变量类型
运行shell时,会同时存在三种变量:
- 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
2.3 字符串
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。
- 单引号:任何字符都会原样输出,无法使用转义字符
- 双引号:可以有变量,可以有转义字符
name="xiaoming"
greeting="hello,$xiaoming"
greeting_1='hello,$xiaoming'
greeting_2="${xiaoming},hello"
echo $greeting
echo $greeting_1
获取字符串长度,提取字符串
str="abcdefg"
echo ${#str}
echo ${str:1:3}
3 传递参数
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n
。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
类似的还有,$#
传递到脚本的参数个数
例子:
echo "Shell 传递参数实例!";
echo "参数个数为:$#";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
设置脚本可执行权限,并执行后的结果为:
zylai@zylai-virtual-machine:~/exp1$ chmod +x params.sh
zylai@zylai-virtual-machine:~/exp1$ bash params.sh
Shell 传递参数实例!
参数个数为:0
执行的文件名:params.sh
第一个参数为:
第二个参数为:
第三个参数为:
zylai@zylai-virtual-machine:~/exp1$ bash params.sh h1 h2
Shell 传递参数实例!
参数个数为:2
执行的文件名:params.sh
第一个参数为:h1
第二个参数为:h2
第三个参数为:
zylai@zylai-virtual-machine:~/exp1$
4 test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
数值测试
参数 | 说明 |
---|---|
-eq | 等于则为真 |
-ne | 不等于则为真 |
-gt | 大于则为真 |
-ge | 大于等于则为真 |
-lt | 小于则为真 |
-le | 小于等于则为真 |
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
输出结果:
两个数相等!
代码中的 [] 执行基本的算数运算,如:
#!/bin/bash
a=5
b=6
result=$[a+b] # 注意等号两边不能有空格
echo "result 为: $result"
#result 为: 11
字符串测试
参数 | 说明 |
---|---|
= | 等于则为真 |
!= | 不相等则为真 |
-z 字符串 | 字符串的长度为零则为真 |
-n 字符串 | 字符串的长度不为零则为真 |
num1="ru1noob"
num2="runoob"
**if** **test** $num1 = $num2
**then**
**echo** '两个字符串相等!'
**else**
**echo** '两个字符串不相等!'
**fi**
输出结果:
两个字符串不相等!
文件测试
参数 | 说明 |
---|---|
-e 文件名 | 如果文件存在则为真 |
-r 文件名 | 如果文件存在且可读则为真 |
-w 文件名 | 如果文件存在且可写则为真 |
-x 文件名 | 如果文件存在且可执行则为真 |
-s 文件名 | 如果文件存在且至少有一个字符则为真 |
-d 文件名 | 如果文件存在且为目录则为真 |
-f 文件名 | 如果文件存在且为普通文件则为真 |
-c 文件名 | 如果文件存在且为字符型特殊文件则为真 |
-b 文件名 | 如果文件存在且为块特殊文件则为真 |
cd /bin
if test -e ./bash
then
echo '文件已存在!'
else
echo '文件不存在!'
fi
输出结果:
文件已存在!
另外,Shell 还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为: ! 最高, -a 次之, -o 最低。例如:
cd /bin
if test -e ./notFile -o -e ./bash
then
echo '至少有一个文件存在!'
else
echo '两个文件都不存在'
fi
输出结果:
至少有一个文件存在!
5 流程控制
5.1 if else
末尾用fi
结束,符合条件的判断后面加then
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
例子:
a=10
b=20
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
#结果:a 小于 b
经常和test
命令一起使用
num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
echo '两个数字相等!'
else
echo '两个数字不相等!'
fi
更多推荐
【Linux】shell教程
发布评论