Shell
目录
一、Shell概述
1.什么是shell ?
2.什么是shell脚本?
3.shell脚本是做什么的?
4.编写shell脚本格式
二、变量和常量
1、变量的声明
2、变量的调用
三、字符串操作
四、Shell数组
1、定义
2、定义数组
3、获取数组
五、Shell基本运算符
1、算数运算符
2、关系运算符
3、布尔运算符
4、字符串运算符
5、文件测试运算符
五、echo命令 输出
1、转义字符
2、显示变量
3、定向符
4、显示输出命令的执行结果
六、Shell printf 命令
七、Shell test 命令
八、语句
1、if语句
2、case语句
3、循环语句
九、函数
LAMP环境部署
一、Shell概述
1.什么是shell ?
shell是一个应用程序,这个程序就提供了一个可供我们编辑的操作页面,用户通过这个界面来访问或者实现对操作系统的管理(命令的操作地)
2.什么是shell脚本?
shell脚本就是在shell环境中编写的脚本程序(其实就是一个文件,只不过这个文件可以被执行)编写脚本:只需要一个文本编辑器v和一个脚本解析器(bash解析器)/bin/bash
3.shell脚本是做什么的?
将多个Linux命令写在一个脚本文件中,用户只需要执行这个脚本文件一次,就会把脚本中所包含的所有命令全部执行 。
4.编写shell脚本格式
vi 脚本文件的名字.sh
例:写一个test.sh,输出“hello,world”
脚本第一行:#!/bIn/bash #!是来指走当前脚本编写完成后用到的解析器
脚本编写完成后,解析的方式:
解析方式一:
/bin/bash 脚本文件的名字
解析方式二:
chmod +x 脚本文件的名字
./脚本文件的名字
#注释
二、变量和常量
变量:在程序运行过程中可以改变的量,被称为变量
x=4-->x=x+2-->x=6
x最开始的数据4,当经过一系列运算之后,x最终的结果是6,x就是一个变量
常量:在程序运行过程中不可以改变的量,被称为常量
x=4 x是一个常量 输出x=4
1、变量的声明
Shell中的变量:
(1)系统默认变量 $PATH
(2)用户自定义变量
格式:变量名=变量值
例子: x=2
(3)只读变量:将变量定义为只读变量,只读变量的值不能被改变
格式:readonly 变量名
(4)删除变量:使用 unset 命令可以删除变量。
语法:unset variable_name
变量被删除后不能再次使用。unset 命令不能删除只读变量
变量的命名规则:
1.首个字符必须是大小写字母(a-z A-Z)
2.变量名中间不能有空格,但是可以有下划线连接 your_name
3.不能出现标点符号 例:不合法的命名 @a3,!
4.不能使用关键字
2、变量的调用
调用:$变量名、${变量名}
{}明确变量调用的边界
输出:echo $变量名
三、字符串操作
(1)字符串的拼接
str=”world”
pj=”hello,$str”
(2)获取字符串的长度
${#变量名}
符号、空格也算作字符
(3)提取子字符串
${变量名:开始截取字符串的下标:截取的长度}
以下实例从字符串第 2 个字符开始截取 4个字符(下标从0开始)
string="my teacher is boy
echo ${string:1:4}
四、Shell数组
1、定义
由多个相同类型的变量构成的集合,没有限定数组的大小。
2、定义数组
数组中所包含的数据称为元素
格式:array=(value0 value1 value2 ...)
或array[0]=value0
array[1]=value1
array[2]=value2
...
3、获取数组
格式:${数组名[下标]}
${数组名[@]} 获取数组中所有元素
length=${#array_name[@]} 获取数组中元素的个数
lengthn=${#array_name[n]} 获取数组中单个元素的长度
五、Shell基本运算符
1、算数运算符
expr 是一款表达式计算工具,使用的是反引号` ` 或 $(())
`expr 数值1 运算符号 数值2` var=$(($a*$b))
例:var=`expr 1 + 1`
假定变量a=10,b=20:
运算符 | 说明 | 举例 |
+ | 加法 | `expr $a + $b`结果为 30 |
- | 减法 | `expr $a - $b`结果为 -10 |
* | 乘法 | `expr $a\*$b`结果为 200 转义字符\ |
/ | 除法 | `expr $b / $a`结果为 2 |
% | 取余 | `expr $b % $a`结果为 0 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a |
== | 相等。比较两个数字,相同则返回 true | [$a == $b] 返回false |
!= | 不相等。比较两个数字,不相同则返回 true。 | [$a != $b] 返回 true |
条件语句:
if [ 条件 ]
then
语句块1(条件成立)
else
语句块2(条件不成立)
fi
2、关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
假定a=10,b=20:
运算符 | 说明 | 举例 |
-eq | 检测两个数是否相等,相等返回 true | [ $a -eq $b ]返回 false |
-ne | 检测两个数是否相等,不相等返回 true | [ $a -ne $b ] 返回 true |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true | [ $a -gt $b ] 返回 false |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true | [ $a -lt $b ] 返回 true |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true | [ $a -ge $b ]返回 false |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true | [ $a -le $b ] 返回 true |
相等:equal 不相等:not equal 大于:Greater than 小于:Less than
大于等于:Greater than or equal to 小于等于:Less than or equal to
3、布尔运算符
假定变量a=10,变量b= 20:
运算符 | 说明 | 举例 |
! | 举例非运算,表达式为 true 则返回 false,否则返回 true. | [ ! false ] 返回 true |
-o | 或运算,有一个表达式为 true 则返回 true | [ $a -lt 20 -o $b -gt 100 ] 返回 true |
-a | 与运算,有一个表达式为false 则返回 false | [ $a -lt 20 -a $b -gt 100 ] 返回 false |
非:! 或:or 与:and 优先级:!>-a>-o
逻辑运算符:
运算符 | 说明 | 举例 |
|| | 逻辑的or | [[ $a -lt 20 || $b -gt 100 ]]返回 true |
&& | 逻辑的and | [[ $a -lt 20 && $b -gt 100 ]] 返回 false |
4、字符串运算符
假定变量a="abc",变量b="efg"
运算符 | 说明 | 举例 |
= | 检测两个字符串是否相等,相等返回 true | [ $a = $b ]返回 false |
!= | 检测两个字符串是否相等,不相等返回 true | [ $a != $b ] 返回 true |
-z | 检测字符串长度是否为0,为0返回 true | [ -z $a ] 返回 false |
-n | 检测字符串长度是否为0,不为0返回 true | [ -n $a ] 返回 true |
str | 检测字符串长度是否为空(null),不为空返回 true | [ $a ]返回 false |
5、文件测试运算符
文件测试运算符用于检测 文件的各种属性。file=文件名
运算符 | 说明 | 举例 |
-d file | 检测文件是否是目录,如果是,则返回 true | [ -d $file ]返回 false |
-f file | 检测文件是否是普通文件,如果是,则返回 true | [ -f $file ] 返回 true |
-r file | 检测文件是否可读,如果是,则返回 true | [ -r $file ] 返回 false |
-w file | 检测文件是否可写,如果是,则返回 true | [ -w $file ] 返回 true |
-x file | 检测文件是否可执行,如果是,则返回 true | [ -x $file ] 返回 true |
-s file | 检测文件是否为空(文件大小是否大于0),不为空返回true | [ -s $file ] 返回 true |
-e file | 检测文件(包括目录)是否存在,如果存在,则返回true | [ -e $file ] 返回 true |
五、echo命令 输出
1、转义字符
\n 换行、回车
\c 不换行
\t 水平制表符、Tab
\b 后退、删除前一个字符
\\ \
\” “
在Shell脚本中,除了转义符号(\,”)外,其他的转义操作都必须借助参数开启转义
-e 开启转义
echo -e “hello,\nworld”
2、显示变量
read命令:从标准输入中读取一行,并把输入行的每个字段的值指定给shel变量。
read name
echo “$name is a test!”
3、定向符
> 显示结果定向至文件,覆盖文件内容
>> 显示结果定向至文件,追加文件内容
echo “It is a test” > myfile
4、显示输出命令的执行结果
格式:echo `Linux命令`
六、Shell printf 命令
printf 输出
格式: printf 格式声明 与格式声明相对应的参数列表
格式声明由两部分组成:百分比符号(%)和指示符
%d %s %c %f 格式替代符:
d:data数字 -- 对应位置参数必须是数字型
s:str字符串 -- 对应位置参数必须是字符串于
c:char字符 -- 对应位置是显示相对应参数的第一个字符
f:float浮点 -- 对应位置参数必须是数字型
printf 具有自动划分的操作,当传递过来内容过多的情况下,会根据格式来进行自动划分显示。
七、Shell test 命令
Shell中的 test 命令用于检查某个条件是否成立。它可以进行数值、字符和文件三个方面的测试。if后面用test代替[]
test $a 参数 $b
参数 说明
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真
八、语句
1、if语句
if [ 条件 ]
then
语句1
elif [ 条件2 ]
then
语句2
else
语句3
fi
2、case语句
格式为:
case $变量名 in
"第一个变量内容”)
程序段
;;
"第二个变量内容”)
程序段
;;
*)
不包含第一个变量内容与第二个变量内容的其它程序执行段
;;
esac
(1)case语句最后必须以esac为结尾
(2)每一个变量内容的程序段最后都需要两个分号来表示该程序段的结束
(3)最后的“*”作用表示默认的意思
3、循环语句
循环(while...do...done)
当判断条件成立时,就进行循环,直到判断的条件不成立才停止
while((判断的条件))
do
程序段
done
let 命令let “ ”,它用于执行一个或多个表达式,变量计算中不需要加上$来表示变量
while:中:表示为真true,会一直循环
跳出循环:指的是未达到终止条件时,跳出循环
break:强制跳出循环
continue:跳转到循环开始的地方
循环(for...do...done)
基本结构1:
for((初始值; 条件; 运算语句 ))
do
程序段
done
案例:使用for循环打印出1到10之间的数
#!/bin/bash #!/bin/bash
for((i=1;i<=10;i+ +)) for((i=1;i<=10;i+ +)) ;do
do echo $i;
echo $i done;
done
基本结构2:
for 变量名 in 值1 值2 值3
do
程序段
done
注意:
1.do/done对包含了循环体
2.如果do和for被写在同一行,必须在do前面加上";"
如 for var in 值;do
九、函数
Shell函数----->方法
定义:就是将脚本中的代码块进行逻辑化的划分操作,划分成一个个功能相对独立的代码块,结构会更清楚
解释性语言:编写完源文件,直接执行,不要任何的编译
格式1:
function 函数名(){
函数体
}
格式2:
函数名(){
函数体
}
可以带function 函数名()定义,也可以直接函数名()定义,不带任何参数。
执行:
函数名
直接使用函数名称即可调用某个函数.
全局变量:脚本中,函数体外
局部变量:函数体内
函数返回值:return 通过$?调用
获取函数执行时传递过来的参数,用$n获取,当n>=10时加大括号,${n},参数的个数$#,列出所有参数$*
递归函数
bash也支持递归函数(能够调用自身的函数)
#!/bin/bash
function name(){
echo“aaaa”
name
}
name
LAMP环境部署
1、安装Apache
卸载自带的httpd:yum remove httpd
yum install httpd #根据提示,输入Y安装即可安装成功
service httpd start #启动Apache
systemctl status httpd #查看Apache运行状态
systemctl start httpd.service #启动
systemctl stop httpd.service #停止
systemctl restart httpd.service #重启
systemctl enable httpd.service #开机自启
systemctl disable httpd.service #开机不启动
2、安装Mysql
重启 mysql:service mysqld restart
停止 mysql:service mysqld stop
启动 mysql:service mysqld start
#开启开机自启动
systemctl enable mysqld
systemctl daemon-reload
3、安装Php