shell脚本基础
1. 语法基本介绍
1.1 开头
程序必须以下面的行开始(必须方在文件的第一行):
#!/bin/sh
符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。
当编辑好脚本时,如果要执行该脚本,还必须使其可执行。
要使脚本可执行:
编译 chmod +x filename 这样才能用./filename 来运行
1.2 注释
在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。
如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。
1.3 变量
在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明
2. 写脚本的注意事项
- 脚本开头第一行必须是#!/bin/bash
- 脚本要有执行权限
- 思路要清晰,不要写无关的东西
- 开两个终端,一个编写脚本,一个测试功能
- 禁止将未执行的代码放入脚本中
- 脚本当中的命令要是有绝对路径
- 脚本中定义的变量和注释要见名知意
3. 变量
3.1 什么是变量
变量就是可以变化的量,不是一个固定的值
3.2 变量名称注意事项
- 只能包含字母、数字、下划线,并且不能以数字开头
- 不应该跟系统中已有的环境变量重名,尽量不要全部使用大写,尽量不要用“_”下划线开头
- 最好做到见名知义
- 不能使用程序中的保留字,例如if、for等
3.3 变量类型
- 字符型
- 数值型
- 整型
- 浮点型
- 布尔型
3.4 变量操作
- 设置变量
- 引用变量
- 撤销变量
单引号与双引号的区别
[root@localhost ~]# a=1
[root@localhost ~]# echo $a
1
[root@localhost ~]# echo '$a'
$a
[root@localhost ~]# echo "$a"
1
[root@localhost ~]# echo {$a}b
{1}b
3.5 base变量类型
- 环境变量
- 本地变量(局部变量)
- 位置变量
- 特殊变量(bash内置的,用来保存某些特殊数据的变量,也称系统变量)
3.5.1 本地变量
VAR_NAME=VALUE //本地变量,作用域为当前shell进程。对当前shell外的其它shell进程,包括当前shell的父shell、子shell进程均无效
local VAR_NAME=VALUE //局部变量,作用域为当前代码段,常用于函数
#示例
[root@localhost ~]# a=1
[root@localhost ~]# echo $a
1
#新开一个终端
[root@localhost ~]# echo $a
[root@localhost ~]#
3.5.2 环境变量
由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。
export VAR_NAME=VALUE //作用域为当前shell进程及其子进程
3.5.3 位置变量
$1,$2,$3,.... //用来引用脚本的参数
shift [num] //位置变量使用完以后退出,后面的参数向前推进
#示例
[root@localhost ~]# cat test.sh
#!/bin/bash
for i in $*;do
echo $1
shift 3
done
[root@localhost ~]# bash test.sh 1 2 3 4 5 6 7 8 9 11 12 13
1
4
7
11
...
3.5.4 特殊变量
$# //是传给脚本的参数个数
$0 //是脚本本身的名字
$! //是shell最后运行的后台Process的PID
$@ //是传给脚本的所有参数的列表
$* //是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ //是脚本运行的当前进程ID号
$? //是显示上条命令的退出状态,0表示没有错误,其他表示有错误