目录
1.shell概述
shell是一种解释型语言,是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。用于操作系统内核和应用程序的交互,具有易编写、易调试、灵活性强的优点。
2.shell脚本入门
2.1 shell 解析器
Linux中提供一下shell解析器,其中常用的是sh以及bash解析器。Cenos默认的解析器是bash
[yangmin@hadoop102 shelltest]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
2.2 脚本格式
脚本以 #!/bin/bash开头(指定解析器)
3.shell中的变量
3.1 系统变量
常用系统变量:$HOME $PWD $SHELL $USER $JAVAHOME等
3.2 自定义变量
基本语法
(1)定义变量:变量=值
(2)撤销变量:unset 变量
(3)声明静态变量:readonly变量,注意:不能unset
定义变量规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
4.运算符
4.1基本语法
(1)“$((运算式))”或“$[运算式]”
(2)expr + , - , \*, /, % 加,减,乘,除,取余
注意:expr运算符间要有空格
4.2 案例实操:
(1)计算3+2的值
[atguigu@hadoop101 datas]$ expr 2 + 3
5
(2)计算3-2的值
[atguigu@hadoop101 datas]$ expr 3 - 2
1
(3)计算(2+3)X4的值
采用一步完成expr
[atguigu@hadoop101 datas]$ expr `expr 2 + 3` \* 4
20
采用[]形式
[atguigu@hadoop101 datas]# S=$[(2+3)*4]
[atguigu@hadoop101 datas]# echo $S
5.条件判断
5.1 基本语法
[ condition ](注意condition前后要有空格)
注意:条件非空即为true,[ atguigu ]返回true,[] 返回false。
5.2 常用判断条件
(1)两个整数之间比较
= 字符串比较
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal) -ne 不等于(Not equal)
(2)按照文件权限进行判断
-r 有读的权限(read) -w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence) -d 文件存在并是一个目录(directory)
6.流程控制
6.1 if判断
6.1.1 基本语法
6.1.2 案例实操
输入一个数字,如果是1,则输出banzhang zhen shuai,如果是2,则输出cls zhen mei,如果是其它,什么也不输出。
#!/bin/bash
if [ $1 -eq "1" ]
then
echo "bangzhang zhen shuai"
elif [ $1 -eq "2" ]
then
echo "xiaopang zhen shuai"
fi
6.2 case语句
6.2.1 基本语法
注意事项:
- case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
- 双分号“;;”表示命令序列结束,相当于java中的break。
- 最后的“*)”表示默认模式,相当于java中的default。
6.2.2 案例实操
输入一个数字,如果是1,则输出banzhang zhen shuai,如果是2,则输出cls zhen mei,如果是其它,什么也不输出。
#!/bin/bash
case $1 in
"1")
echo "xiaomin"
;;
"2")
echo "xiaopang"
;;
*)
echo "xiaomeimei"
;;
esac
6.3 for循环
6.3.1 基本语法
6.3.2 案例实操
从1加到100
#!/bin/bash
s=0
for ((i=0;i<=100;i++))
do
s=$[$i+$s]
done
echo $s
~
~
6.4 while循环
6.4.1 基本语法
6.4.2 案例实操
从1加到100
#!/bin/bash
s=0
i=0
while [ $i -le 100 ]
do
s=$[$i+$s]
i=$[$i+1]
done
echo $s
j=0
while [ $j -le 10 ]
do
echo "I love xiaopang"
j=$[$j+1]
done