shell

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
posted @ 2020-01-13 22:19  zx125  阅读(187)  评论(0编辑  收藏  举报