文章目录
bshell脚本
shell脚本是包含一系列命令的文本文件
用于重复性操作–事务批处理–自动化运维–定时任务执行
#!为一个约定的标记
放到linux里先授权,后执行
ps:在对变量进行取值时,最好用${xx}来划定范围,$xx这样会有歧义
一:基本操作:
1.打印:
变量打印:
#!/bin/bash
echo 'hello world'
name="zs"
echo "hello,"${name}
echo ${name}
# \$在单引号里无法取到变量,双引号能对${name}取变量
echo "hello,${name}"
echo 'hello,${name}'
结果显示:
[root@niceday ~]# ./test.sh
hello world
hello,zs
zs
hello,zs
hello,$name
命令打印:
name= `rpm -qa | grep mysql`
echo $name
[root@niceday opt]# ./test2.sh
mysql-community-release-el7-5.noarch mysql-community-common-5.6.48-2.el7.x86_64 mysql-community-client-5.6.48-2.el7.x86_64 mysql-community-server-5.6.48-2.el7.x86_64 mysql-community-libs-5.6.48-2.el7.x86_64
2.计算:
数值计算:
# 展开计算
v1=123
v2=456
((var=$v1 + $v2))
echo "var is:$var"
[root@niceday opt]# ./test2.sh
var is 579
3.流程控制:
if判断:
#!/bin/bash
# $0为程序本身 $1-$9代表顺序输入参数编号 -大于10使用括号${10}
if [ $1 == $2 ]
then
echo "hello"
fi
if [ $2 -gt $3 ]
then
echo "dayu"
fi
# fi 为if反写来表示结尾
[root@niceday opt]# ./test2.sh 10 10 50
hello
if [ $1 -lt 20 ]
then
echo "hello"
elif [ $1 -lt 40 ]
then
echo "大于20小于40"
else
echo "其他值"
fi
[root@niceday opt]# ./test2.sh 40
其他值
[root@niceday opt]# ./test2.sh 30
大于20小于40
for判断:
var=`rpm -qa | grep mysql`
for x in $var
do
echo "my data:$x"
done
[root@niceday opt]# ./test2.sh
my data:mysql-community-release-el7-5.noarch
my data:mysql-community-common-5.6.48-2.el7.x86_64
my data:mysql-community-client-5.6.48-2.el7.x86_64
my data:mysql-community-server-5.6.48-2.el7.x86_64
my data:mysql-community-libs-5.6.48-2.el7.x86_64
while判断:
while(($nums <= 5))
do
echo "num: $nums"
let "nums++"
# ((nums=$nums + 1))
done
[root@niceday opt]# ./test2.sh
num: 1
num: 2
num: 3
num: 4
num: 5
二:运算符:
数值关系运算符:
- -eq 等于----equal
- -ne 不等于----not equal
- -gt 大于----greater than
- -lt 小于----less than
- -le 小于或等于 ----less or equal
- -ge 大于或等于----greater pr equal
布尔运算符:
- -o 或运算
- -a 与运算
$0为程序本身 $1-$9代表顺序参数编号 -大于10使用括号${10}
字符串运算符:
- 判断字符串相等直接=即可
- -z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
- -n 检测字符串长度是否不为 0,不为 0 返回 true。 [ -n “$a” ] 返回 true。
- $ 检测字符串是否为空,不为空返回 true。
字符串之间判断是用=,而不是==。
文件运算符:
- -e 判断文件是否存在-exist
- -d 判断是不是目录 -directory
- -r 判断文件是不是可读 -read
- -w 判断文件是否可写 -write
- -x 判断文件是否可执行 -excute
- -f 判断是不是普通文件(既不是目录,也不是设备文件)-file
- -s 判断文件是否为空 -size