Shell脚本(一)
一.shell
shell是指一种应用程序,提供一个界面,用户通过这个界面访问操作系统内核的服务
1.shell脚本编写
#!/bin/bash 约定标记,告诉系统这个脚本需要什么解释器来执行
2.运行Shell脚本两种方法
(1)作为可执行程序
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
(2)作为解释器参数
/bin/sh test.sh
二.shell变量
1.定义变量
my_name="ahka"
注:变量名和等号之间不能有空格
2.使用变量: 在变量名前面加美元符号
echo $my_name
echo ${my_name}
3.只读变量:变量不能被改变
readonly my_name
4.删除变量
unset my_name
5.变量类型
(1)局部变量:在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问
(2)环境变量:所有的程序都可以访问环境变量
(3)shell变量:由shell程序设置的特殊变量
三Shell字符串
1.单引号:字符原样输出,变量无效
2.双引号:可以有变量
3.字符串拼接:
4.获取字符串的长度
echo ${#string}
5.提取字符串
${string:1:4}
6.查找字符串
注:哪个字母先出现就计算哪个
string="runoob is a great site"
echo `expr index "$string" io` # 输出 4
四.Shell 数组
1.定义数组
数组名=(值1 值2 … 值n)
2.读取数组
${数组名[下标]}
3.获取数组的长度
五.传递参数
1.脚本内获取参数的格式为
$n :n 代表一个数字
$1 为执行脚本的第一个参数
$0 为执行的文件名
n大于10要用花括号括起来
执行后:
六.shell基本运算符
注:expr 是一款表达式计算工具,使用它能完成表达式的求值操作
1.算数运算符
加+,减-,乘*,除/,求余%,赋值=,相等==,不相等!=
注意:注意括号内部的空格和运算符与变量之间的空格
2.关系运算符
注:只支持数字,不支持字符串,除非字符串的值是数字
1.eq:是否相等,相等则返回true
2.-ne:是否不相等,不相等则返回true
3.-gt:左边是否大于右边的数,大于则返回true
4.-lt:左边的数是否小于右边的数,小于则返回true
5.-ge:左边的数是否大于等于右边的数,是则返回true
6.-le:左边的数是否小于等于右边的数,是则返回true
#!/bin/bash
a=10
b=20
# -eq 是否相等
if [ $a -eq $b ]
then
echo "a等于b"
else
echo "a不等于b"
fi
# -ne 是否不相等
if [ $a -ne $b ]
then
echo "a不等于b"
else
echo "a等于b"
fi
# -gt 是否大于
if [ $a -gt $b ]
then
echo "a大于b"
else
echo "a不大于b"
fi
# -lt 是否小于
if [ $a -lt $b ]
then
echo "a小于b"
else
echo "a不小于b"
fi
# -ge 是否大于等于
if [ $a -ge $b ]
then
echo "a大于或等于b"
else
echo "a小于b"
fi
# -le 是否小于等于
if [ $a -le $b ]
then
echo "a小于或等于b"
else
echo "a大于b"
fi
结果:
[root@cent30 function]# sh guanxi.sh
a不等于b
a不等于b
a不大于b
a小于b
a小于b
a小于或等于b
3.布尔运算符
1.!:非运算 ,表达式为true则返回false,否则返回true
2.-o:或运算
3.-a:与运算
#!/bin/bash
a=10
b=20
# !不等于
if [ $a != $b ]
then
echo "a不等于b"
else
echo "a等于b"
fi
# -a 与
if [ $a -lt 20 -a $b -gt 15 ]
then
echo "a小于20且b大于15:返回true"
else
echo "a小于20且b大于15:返回false"
fi
# -o 或
if [ $a -lt 10 -o $b -gt 15 ]
then
echo "a小于20或b大于15:返回true"
else
echo "a小于20或b大于15:返回false"
fi
结果:
[root@cent30 function]# sh boonlean.sh
a不等于b
a小于20且b大于15:返回true
a小于20或b大于15:返回true
4 .逻辑运算符
1.&&:逻辑的and
2.||:逻辑的or
#!/bin/bash
a=10
b=20
# && 逻辑与
if [[ $a -lt 100 && $b -gt 100 ]]
then
echo "返回true"
else
echo "返回false"
fi
# ||逻辑或
if [[ $a -lt 100 || $b -gt 100 ]]
then
echo "返回true"
else
echo "返回false"
fi
结果:
[root@cent30 function]# sh luoji.sh
返回false
返回true
5.字符串运算符
1.=:检测两个字符串是否相等
2.!=:不相等返回true
3. -z:字符度长度为0,返回true
4. -n:字符串长度不为0,返回true
5. $:检测字符串是否为空,不为空返回true
#!/bin/bash
a="abc"
b="efg"
# =判断是否相等
if [ $a = $b ]
then
echo "a等于b"
else
echo "a不等于b"
fi
# != 不相等
if [ $a != $b ]
then
echo "a不等于b"
else
echo "a等于b"
fi
# -z 长度为0返回true
if [ -z $a ]
then
echo "a的长度等于0"
else
echo "a的长度不等于0"
fi
# -n 长度不为0返回true
if [ -n $a ]
then
echo "a的长度不等于0"
else
echo "a的长度等于0"
fi
# $ 字符串不为空返回true
if [ $a ]
then
echo "a字符串不为空"
else
echo "a字符串为空"
fi
结果:
[root@cent30 function]# sh zifuchuan.sh
a不等于b
a不等于b
a的长度不等于0
a的长度不等于0
a字符串不为空
6.文件测试运算符
1.-b file :检测文件是否是块设备文件,是,则返回true
2.-c file:检测文件是否是字符设备文件,是,则返回true
3.-d file:检测文件是否是目录,是,则返回true
4.-f file:检测文件是否是块普通文件,是,则返回true
5.-g file:检测文件是否是设置了SGID定位,是,则返回true
6.-k file:检测文件是否设置了粘着位,是,则返回true
7.-p file:检测文件是否是有名管道,是,则返回true
8.-r file:检测文件是否是可读,是,则返回true
9.-w file:检测文件是否是可写,是,则返回true
10.-x file:检测文件是否是执行,是,则返回true
11.-s file:检测文件是否是为空,不为空则返回true
12.-e file:检测文件是否存在,是,则返回true
#!/bin/bash
file="/root/function/guanxi.sh"
# -r 可读
if [ -r $file ]
then
echo "文件可读"
else
echo "文件不可读"
fi
# -w 可写
if [ -w $file ]
then
echo "文件可写"
else
echo "文件不可写"
fi
# -x 可执行
if [ -x $file ]
then
echo "文件可执行"
else
echo "文件不可执行"
fi
# -f 是否为普通文件
if [ -f $file ]
then
echo "文件为普通文件"
else
echo "文件不是普通文件"
fi
# -d 是否为目录
if [ -d $file ]
then
echo "文件是个目录"
else
echo "文件不是个目录"
fi
# -s 是否为空
if [ -s $file ]
then
echo "文件不为空"
else
echo "文件为空"
fi
# -e 是否存在
if [ -e $file ]
then
echo "文件存在"
else
echo "文件不存在"
fi
结果:
[root@cent30 function]# sh wenjian-test.sh
文件可读
文件可写
文件不可执行
文件为普通文件
文件不是个目录
文件不为空
文件存在