bash 拜shell
可以理解为:指令的堆积
脚本(命令)解释器
{}引用标量
[]条件运算,做比较
1、linux中常见的shell脚本(shell解释器):sh、bash、asd、csh、ksh
2、linux里默认发行版本中shell脚本是bash,所以linux进程也叫bash进程
3、shell能用来做什么
a、将负杂命令简单化(操作步骤较复杂实现简单化)
b、完成自动打包部署发布
c、清理磁盘空间
d、总之一切有规律的活动都可以尝试写shell脚本来实现
bash
变量 : 内存空间、存放数据的空间。
变量名:相当于一个指针,指向该变量。
变量的类型:(考虑变量的作用域的问题)
1、环境变量:作用范围为当前的shell进程以及子进程中
2、本地变量:作用范围为当前的shell进程
3、局部变量:作用范围为当前shell脚本中的某一块中
4、特殊变量
a、$#:获取shell命令中参数的个数
b、$*:获取shell中中所有的参数
c、$?:获取上一命令执行的结果(0代表成功,非0代表失败)
定义本地变量:name=“obama” 打印变量echo $name
查看本地变量:set
销毁本地变量:unset+变量名
定义环境变量:(是一个导出的本地变量)export yy=‘xupeng’
查看环境变量:export
销毁环境变量:unset+变量名
变量的引用:
1、$(name),$name
符号引用:
1、单引号(‘’):它表示强引用,所引用的变量(值)不可改变(单引号中是什么就输出什么)
2、双引号(“”):它表示弱引用。所引用的变量可改变
3、反引号(``):它表示命令替换的作用(显示实时的命令结果)
bash中的常见参数:
-n:检查语法(只能检查语法错误不能检查脚本的指令错误)
-x:调试脚本
运算:(+ - * /)
expr 10 \* 10 乘法的*需要转义
expr实现运算效果(只能实现整数、字符间的运算)
shell中的条件测试:
条件测试:
整数测试:
-gt(greater) :是否大于 (条件成立则输出0 ,否则为1)
[root@localhost bin]# a=4
[root@localhost bin]# b=3
[root@localhost bin]# [ $a -gt $b ]
[root@localhost bin]# echo $?
0
-ge(greater equ) :是否大于等于
-lt(little):是否小于
-le(little equ):是否小于等于
-eq(equ):是否等于
-ne(not equ):是否不等于
字符串测试:
ASCII数值越大,字符比较时其值越大(只做了解,可不做讲解)
"$a">"$b" 是否大于
"$a"=="$b" 是否等于
-z (-zero) "$a": 长度是否为空
-n(-non zero) "$a": 长度是否不空
文件测试:测试文件的存在性以及属性测试
-e(exist) :是否存在 eg:#[-e /etc/文件名] ,存在为真,否则为假
-f(file):文件是否为普通文件
-d(dirctory) 文件是否为目录
-h() 是否存在且为符合链接文件 -----/dev
-b(block) 是否存在且为块设备文件 -----/dev
-s(sock) 是否存在且为套接文件 -----/var/lib/mysql/mysql.sock
-p(post) 是否存在且为管道文件
-r 当前用户对文件是否有读权限
-w 当前用户对文件是否有写权限
-x 当前用户对文件是否有执行权限
脚本实战:
1、if判断语句:单分支和多分支
格式:(单分支)
if 条件 ;then
分支
else
分支
fi
2、if多分支
格式
if 条件;then
分支
elif 条件;then
.......
fi
2、脚本参数 ($0...........$n)
sh test2.sh /gsf/a /gsf/b /gsf/c
eg:判断给定数据的类型
#!/bin/bash
file=$1
if [ $# -eq 0 ];then
echo "输入一个值"
exit
fi
if [ -f $file ];then
echo "文件"
elif [ -s $file ];then
echo "套接文件"
elif [ -d $file ];then
echo "目录"
else
echo "未知"
fi
3、除了传参还能用与用户交互方式往脚本中传输
read
1、read:从你输入的值中读取一个值
[root@localhost gsf]# read name age
gsf 20
name就是gsf了,age就是20
2、可以传入一组数据
[root@localhost gsf]# read -a name
aaa vvv bbb ccc
[root@localhost gsf]# echo ${name[1]} 看"第1个"参数
vvv
[root@localhost gsf]# echo ${name} 看所有参数
aaa vvv bbb ccc
[root@localhost gsf]# echo ${#name[3]} 看第三个字符长度
3
eg:写一个脚本比较任意2个数字的大小。test5要求考虑字符串
循环语句:
1、for循环
循环:将循环体循环执行0、1或者多次
格式:
for 循环条件:do
循环体
done
for循环关键是要生成一个循环列表
for i in (1..10)
seq 1 10:生成1到10的列表
seq 1 2 10:生成基数列
seq 0 2 10:生成偶数列
for i in $[seq 1 10]
注意:
一、continue和break
1、continue:结束本轮循环开始下一轮循环
2、break:直接终止循环
二、循环中的运算
let:循环里里用let同样可以实现运算效果(只能实现整数的运算)
while循环:
1.格式
while 条件:do
循环体
done
a.进入while循环:当条件成立的时候进入循环
b.退出while循环:当条件不成立的时候退出循环
2、死循环
格式
while true; do ---该格式表示死循环
循环体
if语句
break
fi
done
|
|