shell脚本
Shell Script,Shell脚本与Windows/Dos下的批处理]相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。——引用百度
创建一个简单的脚本
- 使用命令创建一个脚本文件:
vi simple.sh //simple.sh为文件名称,为.sh格式
- 进入到编辑文件
#!/bin/dash
echo "开始执行脚本"
- 退出并保存,执行脚本:
bash+脚本文件名
[root@root ~]# bash simple.sh
开始执行脚本 //输出内容
#!/bin/dash:#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径
echo:为输出命令,用于输出预设的文字
赋值
输入赋值
#!/bin/dash
echo "begin"
echo "赋值方法一"
read -p "输入一个值进行赋值操作:" value1 value2
echo "value1=$value1"
echo "value2=$value2"
echo "赋值方法二"
echo -n "输入多个值进行赋值操作:"
read v1 v2
echo "v1=$v1"
echo "v2=$v2"
[root@root ~]# bash demo.sh
begin
赋值方法一
输入一个值进行赋值操作:value1 value2
value1=value1
value2=value2
赋值方法二
输入多个值进行赋值操作:v1 v2
v1=v1
v2=v2
注意:赋值多个值时要用空隔建多值之间进行隔
判断+流程控制语句
可以通过判断语言加流程控制语句来控制命令的执行
判断语句格式
[ -e xxx ]
上述为判断xxx文件是否存在,注意中括号'['后面与']'前面必须都要带一个空格;
1、-d 判断文件是否为文件夹
2、-f 判断是否为文件
3、-e 判断文件/文件夹是否存在
4、-r 判断用户是否有读取权限
5、-w 判断用户是否有写入权限
6、-x 判断用户是否有执行权限
- 在判断中还可以运用:
数值比较符:-eq(是否相等),-gt(是否大于),-lt(是否小于),-ne(是否有不等于),-le(是否等于或小于),-ge(是否等于或大于)
;
字符串比较符:=(是否相等),!=(是否不等于),-z(是否为空)
;
流程控制语句:
1、if语句
if 判断语句
then 命令语句
else 命令语句
fi
*例如:
#!/bin/bash
echo "开始执行脚本"
if [ ! -e test ]
then
echo "文件不存在,创建文件夹"
mkdir test
else
echo "文件夹存在"
fi
- 执行
[root@root ~]# bash simple.sh
开始执行脚本
文件不存在,创建文件夹
[root@root ~]# [ -e test ] && echo "true"
true
!:结果相反,否的意思,与java一致
&&:为true则执行后续命令
||:为false则不执行后续命令
2、case语句
case 参数 in
限制条件1 )
命令语句1
;;
限制条件2 )
命令语句2
;;
限制条件3 )
命令语句3
;;
*)
默认执行命令
esac
- 例如
#!/bin/bash
echo "开始执行脚本"
read -p "请输入一个数字:" value
case "$value" in
10)
echo "数字为10"
;;
20)
echo "数字为10"
;;
*)
echo "为其他值"
esac
- 执行
[root@root ~]# bash simple.sh
开始执行脚本
请输入一个数字:10
数字为10
[root@root ~]# bash simple.sh
开始执行脚本
请输入一个数字:21
为其他值
循环语句
1、for循环语句
跳出循环:continue
- 写法1
#!/bin/bash
echo "开始执行脚本"
read -p "请输入一个循环次数:" value //
for((i=1;i<"$value";i++));
do
echo "循环了$i 次";
done
- 执行
[root@root ~]# bash simple.sh
开始执行脚本
请输入一个循环次数:12
循环了1 次
循环了2 次
循环了3 次
循环了4 次
循环了5 次
循环了6 次
循环了7 次
循环了8 次
循环了9 次
循环了10 次
循环了11 次
*写法2
#!/bin/bash
echo "开始执行脚本"
declare -i sum=0 //声明一个变量
for i in {1..10};
do
let sum+=$i;
done
echo $sum
- 执行
[root@root ~]# bash simple.sh
开始执行脚本
55
- 写法3 读取文件
#!/bin/bash
echo "开始执行脚本"
declare -i sum=0
for i in $(cat test.txt); //读取文件内容
do
echo $i;
done
test.txt内容
[root@root ~]# bash simple.sh
开始执行脚本
111
222
333
444
555
- 执行
[root@root ~]# bash simple.sh
开始执行脚本
111
222
333
444
555
cat的使用
//1.查看文件
cat filename.格式
//2.合并文件
cat filename1.格式 filename2.格式 > newFile.格式
//3.创建并编辑文件
cat > filename.格式
//4.清空文件
cat /dev/null > filename.格式
//5.根据指定内容停止
cat >> filename.格式 << 结束标识
2、while语句
while true
do
执行语句
done
- 例如
echo "开始执行脚本"
sum=0
while [ $sum -lt 10 ]
do
echo $sum
sum=$((sum+1))
done
- 执行
[root@root ~]# bash simple.sh
开始执行脚本
0
1
2
3
4
5
6
7
8
9
关键字 ‘expr’ 的用法
-
功能:
expr命令可以实现数值运算、数值或字符串比较、字符串匹配、字符串提取、字符串长度计算等功能。由于其在进行数值运算、比较时会进行字符串转义为数值,无法转义则会报错,所以它还具有几个特殊功能,判断变量或参数是否为整数、是否为空、是否为0等。
- 1、正则表达式匹配
冒号两边需留出一个空格,正则表达式中自带隐含"^",要暂时匹配字段,正则后面加上"(.)"或"(.*)"
expr string : REGEX
- 2、字符串匹配
查询string2在第string1中有匹配到第字符所在的第一个位置
expr index string1 string2
- 3、按位置进行字符串截取
expr substr string beginNum endNum
- 4、获取字符串长度
expr length string
- 5、数值运算
字符串表达式的优先级高于数值表达式和逻辑关系表达式
expr num1 +/-/*.. num2
- 6、比较运算
expr num1 '<'/<=/=/==/!=/>=/'>' num2
- 7、逻辑连接符号‘$’和‘|’
`注意:为防止被转义,需要用''包围``
规则|:
1、 "&"表示如果两个参数都非0,则返回第一个参数,否则返回0。但任意一个参数为空,则expr报错。除非空字符串使用引号包围,则处理方法和0一样。
2、"|"表示如果第一个参数非0,则返回第一个参数的值,否则返回第二个参数。但如果任意一个参数为空,则expr报错。除非空字符串使用引号包围,则处理方法和0一样。
expr num1 '&/|' num2