shell脚本
变量名称注意事项
- 只能包含字母,数字.下划线,并且不能以数字开头
- 不应该跟系统中已有的变量重名,尽量不要全部使用大写,尽量不要用’_'下划线开头
- 不能使用程序中保留字,例如if、for等
1.查看当前系统支持的shell
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
2.查看当前系统默认使用的shell
[root@localhost ~]# echo $SHELL
/bin/bash
脚本测试
[root@localhost ~]# bash -n hh.sh //’检查是否有语法错误
[root@localhost ~]#
[root@localhost ~]# bash -x hh.sh // 单步执行脚本错在那
+ (( i=0 ))
+ (( i<=1 ))
+ echo 0
0
+ (( i++ ))
+ (( i<=1 ))
+ echo 1
1
+ (( i++ ))
+ (( i<=1 ))
写脚本注意事项
- 禁止将未成功执行的代码直接写进脚本
- 脚本中的命令一定要有用绝对路径
算术公式
变量的操作
设置变量
引用变量
撤销变量
[root@localhost ~]# A=19999
[root@localhost ~]# echo $A
19999
[root@localhost ~]# unset A
[root@localhost ~]# echo $A
[root@localhost ~]#
单引号和双引号与变量的关系
双引号,弱引用,可以实现变量替换
[root@ansible ~]# num1=10
[root@ansible ~]# echo "$num1"
单引号,强引用,不完成变量替换
[root@ansible ~]# echo '$num1'
$num1
bash变量的类型
- 环境变量
- 本地变量
- 位置变量
- 系统变量
[root@localhost ~]# age=20
[root@localhost ~]# echo $age
20
[root@localhost ~]# export age=20
[root@localhost ~]# echo $age
20
[root@localhost ~]# bash
[root@localhost ~]# echo $age
20
[root@localhost ~]# bash
[root@localhost ~]# cat dmm.sh
#! /bin/bash
echo $#
[root@localhost ~]#
[root@localhost ~]# ./dmm.sh 1 2 3 5 4 5 61 5
8
特殊变量
* $#: 位置参数的数量 位置变量不同,参数可超过9个
* $* 所有位置参数的内容
* $? 命令执行后返回的状态,0表示没有错误,非0表示有错误
* $! 后台运行的最后的一个Process进程号
* $0 当前执行的进程名
* $@ 是传给脚本的所有参数的列表
* $$ 是脚本运行的当前程ID号
bash内创建环境变量
PATH
SHELL
UID
HISTSIZE
HOME
PWD
HISTFILE
PS1
PATH #系统中所有命令查找的位置
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
SHELL #这个变量中存放着当前使用的shell
[root@localhost ~]# echo $SHELL
/bin/bash
#当前用户的UID
[root@localhost ~]# echo $UID
0
HOME #当前用户的家目录
[root@localhost ~]# echo $HOME
/root
PWD #当前所在的目录路径
[root@localhost ~]# echo $PWD
/root
HISTFILE #命令历史存放的文件
[root@localhost ~]# echo $HISTFILE
/root/.bash_history
PS1 #定义命令提示符
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
、Shell命令替换: 理解为将指令的执行结果赋值给变量
#方式一:使用反应号将指令包围
var_name1 = `date`
#方式二:使用$()将指令包围
var_name2 = $(date)
echo $var_name1
echo $var_name2
只读变量
readonly VAR_NAME=VALUE //不能修改值,不能销毁,只能等shell进程终止时随之消亡
整数测试
-eg //测试两个整数是否相等
- ne //测试两个整数是否不等
- gt //测试一个数是否大于一个数
- lt // 测试一个数是否小于一个数
- ge //小于或等于
- le //小于或等于
字符测试`
== // 等值比较,检查==两边都是有空格
!= //检查两边内容是否一致,不一致为真,一致为假
=~ //左侧字符串能够被右侧的PATTERN所匹配到,此表达式应用于双中括号[[ ]]中
-z “ string“ //测试指定字符串是否为空,空则为假
-n “string” //测试指定字符串是否不空,不空则为真 空则为假
文件测试
// 存在性测试:
-e // 测试文件是否存在
// 存在性质及类型是否存在
-b //测试文件是否为块设备文件
-c //测试文件是否为字符设设备文件
-f //测试文件是否我普通文件
-d //测试指定路径是否为目录
-h //测试文件是否为符号链接文件
-L //测试文件是否为命名普通文件
-p //测试文件是否为命名管道文件
-S // 测试文件是否为套接字文件
//文件权限测试
-r //测试当前用户对指定文件是否有读权限
-w //测试当前用户对指定文件是否有读写权限
-x //测试当前用户对指定文件是否有执行权限
// 文件特殊权限测试
-g // 测试文件是否有sgid 权限
-u // 测试文件是否有suid权限
-k // 测试文件是否有sticky权限
//文件大小测试、
-s //测试文件是否为空
// 文件是否打开测试
-t fd //fd 表示的文件描述是否已经打开且与某终端相关
// 双目测试:
file -ef file2 //测试fle1 与file2是否指定同一个设备上相同inode,
file1 -nt file2 //测试file1是否比file2 新
file1 -ot file2 //测试file1是否比file2旧
无分类:
-N //测试文件自从上一次被读取过之后是否被修改过
-o //测试文件是否存在并且当前用户拥有
-G 、、测试文件是否存在并且在默认组是否为当前用户组