Shell脚本基础
变量
什么是变量?
变量即可以变化的量
变量名称注意事项
- 只能包含字母、数字、下划线,并且不能以数字开头
- 不应该跟系统中已有的环境变量重名,尽量不要全部使用大写,尽量不要用“_”下划线开头
- 最好做到见名知义
- 不能使用程序中的保留字,例如if、for等
变量类型
- 字符型
- 数值型
- 整型
- 浮点型
- 布尔型
变量操作
- 设置变量
- 引用变量
- 撤销变量
单引号与双引号的区别
bash变量类型
- 环境变量
- 本地变量(局部变量)
- 位置变量
- 特殊变量(bash内置的,用来保存某些特殊数据的变量,也称系统变量)
本地变量
VAR_NAME=VALUE //本地变量,作用域为当前shell进程。对当前shell外的其它shell进程,包括当前shell的父shell、子shell进程均无效
local VAR_NAME=VALUE //局部变量,作用域为当前代码段,常用于函数
环境变量
export VAR_NAME=VALUE //作用域为当前shell进程及其子进程
[root@node0 ~]# export a=1
[root@node0 ~]# echo $a
1
//启用子进程
[root@node0 ~]# bash
[root@node0 ~]# echo $a
1 #依然生效
位置变量
$1 $2 //用来引用脚本的参数 数字代表位置
shift [num] //使用完后退出,后面向前推进
[root@yqh ~]# cat test.sh
#!/bin/bash
for i in $*;do
echo $1
shift 2
[root@node0 ~]# ./test.sh a b c d e #传递5个参数循环5次,位置1执行参数是a,向后推2个是c,再就是e,e后面没有参数,则再输出2次e完成
a
c
e
e
e
特殊变量
$# //是传给脚本的参数个数
$0 //是脚本本身的名字
$! //是shell最后运行的后台Process的PID
$@ //是传给脚本的所有参数的列表
$* //是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ //是脚本运行的当前进程ID号
$? //是显示上条命令的退出状态,0表示没有错误,其他表示有错误
bash内建环境变量
PATH #寻找命令路径
[yqh@yqh ~]$ echo $PATH
/home/yqh/.local/bin:/home/yqh/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbinSHELL #查看当前shell
[yqh@yqh ~]$ echo $SHELL
/bin/bash
UID #查看当前用户uid
[yqh@yqh ~]$ echo $UID
1000
HISTSIZE #查看可存储历史记录总大小
[yqh@yqh ~]$ echo $HISTSIZE
1000
HOME #查看当前用户家目录
[yqh@yqh ~]$ echo $HOME
/home/yqh
PWD #查看用户当前所在位置
[yqh@yqh /]$ echo $PWD
/
HISTFILE #查看当前用户历史记录文件储存位置
[yqh@yqh /]$ echo $HISTFILE
/home/yqh/.bash_history
PS1 #定义系统提示符的变量
[yqh@yqh /]$ echo $PS1
[\u@\h \W]\$
写脚本的思路
编写流程
- 先手动部署确立完成思路
- 分类和分析
- 通用性
- 写脚本
- 开2个终端,一个写脚本,一个测试
- 测试
- 功能写完后立即测试(运行2遍以上确保通用性)
shell脚本编程注意事项
-
指定bash(#! /bin/bash)可能出现默认sh不是bash的情况
-
禁止将未执行的代码直接写入脚本
-
脚本中的命令一定要用绝对路径
-
注意local,bash中如果不在变量前添加local默认是全局变量,添加后只在当前代码段生效
-
使用sheelcheck检查语法