shell脚本
指定解析器
#!/bin/zsh
打印文本
echo "hello world!"
常用系统变量
$HOME
$PWD
$SHELL
$USER
定义变量
基本语法
-
变量=值
等号两边没有空格
-
撤销命令
unset
-
声明静态变量
readonly 变量=值
-
在bash里,变量默认类型都是字符串类型,无法直接进行数值运算
$ A=1+1 $ echo $A
-
变量的值如果有空格,需要使用双引号或单引号括起来
-
使用
export
将变量提升为全局变量(只对于当前shell),可供其他shell程序使用shell文件中变量生命周期只在该文件中
特殊变量
$n
n为数字,访问脚本参数(10以上要用括号包含,如${10}
)
$#
$#
(功能描述:获取所有输入参数个数,常用于循环)。
$?
$?
(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
$*
、$@
$*
(功能描述:这个变量代表命令行中所有的参数,$*
把所有的参数看成一个整体)
$@
(功能描述:这个变量也代表命令行中所有的参数,不过$@
把每个参数区分对待)
运算符
-
$((运算式))
或$[运算式]
-
expr + , - , \*, /, %
加,减,乘,除,取余
注意:expr
运算符间要有空格
$ expr 1 + 2
# (4+2)/2
$ expr `expr 4 + 2` / 2
$ echo $[(4+2)/2]
$ echo $(((4+2)/2))
条件判断
基本语法
[ condition ]
(注意condition前后要有空格)
注意:条件非空即为true,[ atguigu ]返回true,[] 返回false。
常用判断条件
- 两个整数之间比较
=
字符串比较
-lt
小于(less than)
-le
小于等于(less equal)
-eq
等于(equal)
-gt
大于(greater than)1 2 3
1
2
3
-ge
大于等于(greater equal)
-ne
不等于(Not equal)
- 按照文件权限进行判断
-r
有读的权限(read)
-w
有写的权限(write)
-x
有执行的权限(execute)
- 按照文件类型进行判断
-f
文件存在并且是一个常规的文件(file)
-e
文件存在(existence)
-d
文件存在并是一个目录(directory)
$ [ 1 = 1 ]
$ [ 1 -le 2]
$ [ -w hello.sh ]
$ [ 1 = 1 ] && [ 1 -le 2] && [ -w hello.sh ]
$ [ 1 = 1 ] || [ 1 -le 2] || [ -w hello.sh ]
流程控制
if
if [ condition ];then
...
fi
if [ condition ]
then
...
fi
if [ $1 -eq 1 ];then
echo "is 1"
else if [ $1 -eq 2 ];then
echo "is 2"
else
echo "not 1 and 2"
fi
fi
case
#!/bin/zsh
case $1 in
1)
echo "1"
;;s=0
for ((i=1;i<=10;i++))
do
s=$[$s+$i]
echo $s
done
2)
echo "2"
;;
*)
echo $1
;;
esac
for
s=0
for ((i=1;i<=10;i++))
do
s=$[$s+$i]
echo $s
done
for i in "$*"
do
echo $i
done
for j in "$@"
do
echo $j
done
# 1 2 3
# 1
# 2
# 3
while
#!/bin/zsh
s=0
i=1
while [ $i -le 10 ]
do
s=$[$s+$i]
i=$[$i+1]
done
echo $s
read
读取控制台输入
read(选项)(参数)
选项:
-
-p
:指定读取值时的提示符; -
-t
:指定读取值时等待的时间(秒)。
参数:
- 变量:指定读取值的变量名
read -t 10 -p $'input something in 10 sec\x0a' THING
echo $THING
函数
function sum()
{
s=0
s=$[ $1 + $2 ]
echo "$s"
}
read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;
必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)