定义
shell是Unix/Linux操作系统中用户与系统交互的接口。
功能
- 命令解释器
- 作为一种高级程序设计语言可以编写出代码简洁、功能强大的程序
shell脚本
vi mytest //建立脚本 新建出的脚本是没有可执行权限的
sh mytest //执行脚本 bash mytest
chmod u+x mytest //mytest加上可执行权限
source mytest //有可执行权限的脚本执行 . mytest
shell变量
- 环境变量
export myname=li //设置新的环境变量
env //显示所有环境变量
echo $myname //显示某个环境变量
- 系统变量
$0 //shell程序名
$1-$9 //第1-9个命令行参数的值
$* //传递给脚本的所有参数,全部参数合为一个字符串
$# //传递给参数的个数
$$ //当前进程的进程id
$? //最后执行的命令的退出状态
注:
命令行参数大于9个时,可以使用shift指令将参数左移
shift //左移1个
shift n //左移n个
- 自定义变量
- 变量名=字符串
注:等号两边不能有空格;使用变量时需要加上$ - 当赋给变量的值含有空格、制表符或者换行符,要是用双引号把这个字符串括起来。例如:
a=" Today is Sunday. " - 变量值可以作为某个字符串中的一部分
例如:
[root@localhost ~]# s=world [root@localhost ~]# echo Hello$s
Helloworld
- 变量名出现在一个长字符串开头或者中间,应该用“{ }”把变量名扩起来。
例如: [a@localhost ~] $ dir=/home/user1/ [a@localhost ~] $ echo ${dir}m1.c /home/user1/m1.c
- shell变量的数学运算
- expr命令
例如:
[root@localhost ~]# a=2 [root@localhost ~]# expr 8 + $a
10
[root@localhost ~]# expr 6 * $a
expr :语法错误
[root@localhost ~]# expr 6 \ * $a
12
例如:
[root@localhost ~]# cat exam
# ! /bin/bash
a=5
b=expr 3 + $a
echo “b=$b”
exit 0
[root@localhost ~]# sh exam
b=8
注意:在运算符的前后都留有空格,否则expr不对表达式进行计算,而直接输出它们。
- let
例如:
[root@localhost ~]#b=10
[root@localhost ~]#let c=5+$b
[root@localhost ~]#echo $c
15
转义符
//转义符应用举例
[root@localhost ~]# cat exam
echo "1. home directory is $HOME"
echo '2. home directory is $HOME'
echo "3. current directory is `pwd` "
echo '4. current directory is `pwd` '
//运行结果:
[root@localhost ~]# ./exam
1. home directory is /home/zhang
2. home directory is $HOME
3. current directory is /home/zhang
4. current directory is `pwd`
shell控制语句
条件测试与判断语句
test expression
test -s filename
["$a"="$b"]
test 10 -gt 13
- 文件测试
- 字符串测试
- 数值测试
- 逻辑操作符
//相关逻辑运算符测试语句。
[root@localhost ~]# [ ! 5 -le 0 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ 5 -gt 3 -a 5 -lt 10 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ 5 -gt 3 -o 5 -lt 5 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# test \( 5 -gt 0 -a 5 -lt 10 \) -a 5 -gt 3
[root@localhost ~]# echo $?
0
循环控制语句
- if判断
if expression //如果if为真 则执行statement1 否则执行statement2
then statement1
else statement2
fi
if expression1
then statement1
....
elif expression2
then statement2
...
fi
- for
- 列表for循环
语法格式如下:
for var in {list}
do
Loop body
done
- 不带列表的for循环
语法格式如下:
for var
do
Loop body
done
- 类似C语言的for循环语句
语法格式如下: for ((expression1;expression2; expression3))
do
Loop body
done
- while循环
语法格式如下:
while ((expression))
do
Loop body
done
//编写程序,这段程序对各个给定的位置参数,首先判断其是否是普通文件,若是,则显示其内容;否则,显示它不是文件名的信息。每次循环处理一个位置参数$1,利用shift命令可把后续位置参数左移。
while [ $1 ]
do
if [ -f $1 ]
then echo " display : $1 "
cat $1
else echo " $1 is not a file name . "
fi
shift
done
- break语句
break n //n层循环