shell编程
shell
是一个命令解释器,它为用户提供了一个向Linux内核发送请求以便于运行程序的系统程序
shell的三种运行方式
代码
#!/bin/bash
echo "hello world"
#需要用户对该文件有运行的权限
./hello.sh
bash hello.sh
#直接调用解释器执行
sh hello.sh
注释
#单行
#
#多行注释
:<<!
内容
!
变量
系统变量
#系统变量:
$PATH 系统环境变量
$HOME 用户目录位置
$PWD 当前路径
$SHELL 解释器目录
$USER 用户
#显示当前shell中所有的变量:set
自定义变量
#定义变量,注意不能用空格,打印变量需要加$
a="zx"
echo $a
#撤销变量
unset zx
#声明静态变量
b="wl"
readonly b
或者
readonly c="zx125"
将命令的返回值赋值给变量
#加反引号
A=`ls -a`
#$()
A=$(ls -a)
添加环境变量
1.在shell脚本编写 export 变量名=变量值
2.source 脚本
3.echo $全局变量
脚本传参
$n (功能描述:n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$#(功能描述:这个变量代表命令行中所有参数的个数)
运算符
1.$((运算式))
2.$[运算式]
#每一个参数和运算符都需要加空格
3.`expr m + n`
#常用运算符
+
-
/
%
\*
\( \)
判断条件
[ 条件 ] 注意:条件前后要有空格
特别的:
[ 非空 ] 为true
[] 为false
[ haha ] && echo true || echo false
字符串比较
= 判等
!= 判不相等
#注意空格
[ "ok" = "ok" ]&&echo true || echo false
整数比较
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于
-eg 等于
-ne 不等于
[ 23 -lt 30 ]&&echo true || echo false
文件权限
-r 有读的权限 [ -r 文件 ]
-w 有写的权限
-x 有执行权限
[ -r /home/zx ]&& echo true || echo false
文件类型判断
-f 存在并且是一般文件 [-f 文件]
-e 文件存在
-d 存在并且是一个目录
[ -f /home/zx ]&& echo true || echo false
流程控制
if
if [ 条件 ]
then
代码
fi
if [ 条件 ]
then
代码
else
代码
fi
if [ 条件 ]
then
代码
elif [ 条件 ]
then
代码
else
代码
fi
实例
if [ $1 -gt 69 ]
then
echo "pass"
else
echo "no"
fi
case
case $变量名 in
'值1')
代码
;;
'值2')
代码
;;
*)
代码 都没命中执行
;;
esac
#!/bin/bash
case $1 in
"1")
echo 1
;;
"2")
echo 2
;;
*)
echo "no"
;;
esac
循环
for
for 变量 in 值1 值2 值3
do
代码
done
#!/bin/bash
for i in "$*"
do
echo "$i"
done
for a in "$@"
do
echo "$a"
done
for2
for {{初始值;循环条件;变量变化}}
do
代码
done
res=0
for((i=1;i<=100;i++))
do
res=$[$res+$i]
done
echo "$res"
while
while [ 条件 ]
do
代码
done
i=1
res=0
while[ $i -le $1 ]
do
res=$[$res+$i]
i=$[$i+1]
done
echo "res"
交互
read 选项 变量
选项:
-p:提示信息
-t:等待输入的时间
#!/bin/bash
read -p "请在三秒内输入参数:" -t 3 name
echo $name
函数
系统函数
其实我们敲的命令基本都是系统函数
basename
basename [pathname] [suffix]
获得路径最后一部分
如果指定的suffix,那么会去掉结果中suffix的部分
basename /home/root/zx.sh
zx.sh
basename /home/root/zx.sh .sh
zx
dirname
dirname [pathname]
获得基础路径
dirname /home/zx/zx/zx
/home/zx/zx
自定义函数
function 函数名(){
代码;
#参数使用:$1,$2,...,${10}...
return xxx;
}
调用:
函数名 值1 值2
#!/bin/bash
function text(){
res=$[$1+$2]
echo $res
return 1
}
res=`text 120 111`
echo "$?"
echo "$res"
#$?表示函数的运行状态 0-255
1
231