一、shell是什么?
shell是一种命令解释器,用于接收应用程序或用户的命令然后调用给操作系统内核 也是功能强大的编程语言
二、解释器有哪些?
查看shell cat /etc/shells
默认解释器是bash
查看所在的shell echo $SHELL
切换shell chsh -s /bin/sh
三、shell脚本格式
#! /bin/bash --指定路径
3.1常用执行方式
3.1.1通过bash命令直接执行
bash +/路径
3.1.2执行权限+x,sh或./
3.1.3第一个shell脚本:helloworld
#! /bin/bash
echo "hello world"
3.1.4第二个shell脚本:多命令处理
#! /bin/bash
touch /home/test/1.txt
echo "hello world" >> 1.txt #创建文件并写内容
四、shell中的变量
系统(环境)变量 $HOME $USER $PWD --作用于整个操作系统或用户 在etc/profile文件中定义
4.1~ /.bashrc目录下为用户下的变量
加入用户环境变量(export)
#.bashrc
export TEST_A=10
最后加载文件
4.2自定义变量(普通变量)
普通变量:作用域是当前的shell(当前的解释器)
4.2.1基本语法
(1)定义变量:变量=值
(2)撤消变量:unset变量
(3)声明静态变量:readonly变量,不能unset
(4)空格代表一句话结束
4.2.2变量定义规则
(1)变量名称可以由字母、数字、下划线组成,但不能数字开头,环境变量建议大写
(2)等号两侧不能有空格
(3)如果有空格需要用单引号或双引号括起来
配置文件中是永久变量,命令行加入的是临时变量
普通变量:用户登录后打开一个bash,打开脚本后又是另一个bash
举例:
[root@localhost test]# C=30
[root@localhost test]# echo $C
30 #定义变量C
[root@localhost test]# vi test
#! /bin/bash
A=10
B="hello world"
echo $A
echo $B
echo $C
#输出变量C
[root@localhost test]# bash test
10
hello world
#无数值输出
临时的用户环境变量只作用于当前变量和其子变量
4.3特殊变量
4.3.1:$n
$n:n为数字,$0代表脚本名字,$1- 9 代表参数,十个以上的参数需要用大括号包含如 9代表参数,十个以上的参数需要用大括号包含如 9代表参数,十个以上的参数需要用大括号包含如{10}
#! /bin/bash
#传参
echo $1
echo $2
echo $3
[root@localhost test]# bash test 1 2 3
1
2
3
4.3.2:$#
输出变量的个数
#! /bin/bash
echo $#
#传参
echo $1
echo $2
echo $3
[root@localhost test]# bash test 123
1 #输出参数赋值的个数
123
4.3.3$?
判断上一个命令是否执行成功
举例:
[root@localhost test]# cat /etc/passwds
cat: /etc/passwds: No such file or directory
[root@localhost test]# echo $?
1 #1不为0代表没有执行成功
五、数字运算和条件
1.基本语法
(1)
(
(
运算式
)
)
或
((运算式))或
((运算式))或[ 运算式]
(2)expr +,-,*,%,加,减,乘,除,取余
注意:expr运算符之间有空格
计算3+2的值
[root@localhost test]# expr 3 + 2
5
2.案例
计算(2+3)x4的值
[root@localhost test]# expr `expr 2 + 3` \* 4
20
shell脚本
#! /bin/bash
A=2
B=3
D=$((A +B))
echo $D
D=$[A+B]
echo $D
#综合运算
D=$[(2+3)*5]
echo $D
#运行
[root@localhost test]# bash test数字运算
5
5
25
六、条件判断
1.基础语法
[ conditon ]condition前后有空格 条件非空即为ture
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)
3.案例实操
#! /bin/bash
[ $# -gt 2 ] && echo"参数的个数大于2"
#[ $# -le 2 ] || echo "参数个数大于2"
运行脚本赋值结果如下