shell编程:
解释性的脚本语言 写好之后不需要编译 shell也是一门语言,有自己的编写规则
1 新建一个shell文件,shell脚本语言的后缀.sh
vim xx.sh
2 运行环境设置 代码的第一行一定要是 #!/bin/bash 声明shell类型bash shell
#!/bin/sh
shell里的注释是#
3 脚本语句的编写: shell指令+系统指令 //pwd ls cd 系统指令
4设置可执行性 shell脚本默认是没有可知行权限的,在执行时需要给执行权限 chmod 777 xx.sh //或chomd +x xx.sh
5 执行脚本文件 执行脚本的指令 ./xxx.sh . xxx.sh 前提是文件有可知行权限
脚本编程:
关于变量: shell的变量没有类型之分,直接定义直接使用,使用时加$符号
cc=gcc $(cc)=gcc
直接定义:str=hello //等号的两端不能加空格
双引号定义 str=“hello” 保留特殊符号的引用含义
单引号定义 str=‘hello’ 去除特殊符号的引用含义 $
小飘号定义:str=$(date) 类似于命令的重定向,命令运行结果重定向到变量里
命令重定向:>输出重定向(覆盖原内容)
>>输出重定向(不覆盖原内容,追加)
变量的分类:
特殊变量: $0 命令本身
$1 2 3 //取命令行参数
$@ //取所有的参数 不包括第0个
$? //判断上一条命令是否执行成功,成功0失败非0
$# //传递参数的个数
$$ //显示当前的进程号
环境变量:由系统维护,用于设置系统的shell工作环境,极少数用户可以修改
执行命令的时候,就回去指定的目录(bin sbin usr/bin)去寻找是否有这个命令
运行程序的时候去指定的目录(lib usr/lib)去找库文件
env显示所有的环境变量
export PATH=
P
A
T
H
:
/
r
o
o
t
/
/
将
r
o
o
t
路
径
添
加
到
P
A
T
H
环
境
变
量
里
边
将
这
句
话
加
入
到
开
机
自
启
动
的
文
件
里
面
即
可
永
久
生
效
/
e
t
c
/
p
r
o
f
i
l
e
(
推
荐
)
e
x
p
o
r
t
L
D
L
I
B
R
A
R
Y
P
A
T
H
=
.
/
:
PATH:/root //将root路径添加到PATH环境变量里边 将这句话加入到开机自启动的文件里面即可永久生效 /etc/profile(推荐) export LD_LIBRARY_PATH=./:
PATH:/root//将root路径添加到PATH环境变量里边将这句话加入到开机自启动的文件里面即可永久生效/etc/profile(推荐)exportLDLIBRARYPATH=./:LD_LIBRARY_PATH 加到profile里
(设置动态库路径,这样就不用将动态库复制到/usr/lib里了
LD_LIBRARY_PATH: 动态库的查找路径)
变量都是字符串,没有类型之分,不用声明
输入输出: read num //输入num
readonly num=5 //定义只读变量 num
输出:echo命令
printf
运算表达式:
test条件表达式 test 表达式1=表达式2 等号两边须有空格
test string1=string2
[条件表达式] [string1=string2] 条件表达式值为真返回0,为假返回非0 echo$? 0为真 非0为假
条件表达式两边要有空格
判断整数:-gt 大于 test 1 -gt 2 或 [ 1 -gt 2 ]要加空格
-ge 大于等于 -eq 等于 -le小于等于 -lt小于 -ne不等于
判断表达式 -a:and 两个条件都要满足
-o:or 至少满足一个
如 [ 1 -gt 2 -a 2 -lt 3]
字符串比较:
[[ -z str ]] //长度为0 返回0
[[ str1 == sre2 ]] //判断是否相等
[[ str1 != str2 ]]
文件条件测试:
-f 文件 //文件存在且是普通文件时,返回真
-l 文件 //存在且是连接文件时,返回真
-d 文件 //存在且是一个目录时,返回真
-e 文件 //(文件或目录存在时,返回真)
-s 文件 // 存在且大小大于0时,返回真
-r 文件 //(文件或目录)存在且可读时,返回真
-w 文件 //(文件或目录)存在且可写时,返回真
-x 文件 //(文件或目录)存在且可执行时,返回真
流程控制
if expr1
then
commands1
elif expr2
then
commands2
else
commands3
fi
case:
case $变量 in
“1”)
命令1
;;
“2”)
命令2
;;
esac
for:
for((i=0;i<5;i++))
do
语句
done
while:
while[循环条件]
do
语句
done
until:
until 条件
do
命令
done
break 用于强行退出当前循环 如果是循环嵌套,则break命令后边可以跟数字n,表示退出第n重循环
continue :用于忽略本次循环的剩余部分,回到循环的顶部,继续下一次循环
数组:
定义:a=(1 2 3 )
引用:取值 ${a[0]}
${a[@]} //取数组中所有的值
${#a[@]} //取数组的长度
${a[@]:2} //截取下标为2以后的所有元素
${a[@]:2:2} //截取下标为2以后的两个元素
函数:
调用的时候直接写函数名即可,无返回值,无参数,仅仅用来封装代码
fun()
{
}
//shell脚本实现在指定目录下寻找指定类型的文件?