Shell 编程学习(一)
1.什么是Shell
shell是一块包裹着系统核心的壳,处于操作系统的最外层,与用户直接对话,把用户的输入,解释给操作系统,然后处理操作系统的输出结果,输出到屏幕给予用户看到结果。
从我们登录linux,输入账号密码到进入Linux交互式界面,所有的操作,都是交给shell解释并执行。
2.Shell是运维人员必须掌握的技能
2016 年初国内服务器端各个操作系统的市场份额:
正是由于 Linux 服务器的大规模应用,才需要一批专业的人才去管理,这群人就是Linux 运维工程师(OPS)。
OPS 这项工作的细节内容包括:
安装操作系统,例如 CentOS、Ubuntu 等。
部署代码运行环境,例如网站后台语言采用 PHP,就需要安装 Nginx、Apache、MySQL、PHP 运行时等。
及时修复漏洞,防止服务器被攻击,这包括 Linux 本身漏洞以及各个软件的漏洞。
根据项目需求升级软件,例如 PHP 7.0 在性能方面获得了重大突破,如果现在服务器压力比较大,就可以考虑将旧版的 PHP 5.x 升级到 PHP 7.0。
监控服务器压力,别让服务器宕机。例如淘宝双十一的时候就会瞬间涌入大量用户,导致部分服务器宕机,网页没法访问,甚至连支付宝都不能使用。
分析日志,及时发现代码或者环境的问题,通知相关人员修复。
对于一些常见的系统脚本,使用 Shell 开发会更简单、更快速,例如,让软件一键自动化安装、优化,监控报警脚本,软件启动脚本,日志分析脚本等,虽然 Python 也能做到这些,但是考虑到掌握难度、开发效率、开发习惯等因素,它们可能就不如 Shell 脚本流行以及有优势了。对于一些常见的业务应用,使用 Shell 更符合 Linux 运维简单、易用、高效的三大原则则。
3.什么是Shell脚本
当命令或者程序语句写在文件中,我们执行文件,读取其中的代码,这个程序文件就称之为Shell脚本。
在shell脚本里定义多条Linux命令以及循环控制语句,然后将这些Linux命令一次性执行完毕,执行脚本文件的方式称之为:非交互式方式。
indows中存在*.bat批处理脚本
Linux中常用*.sh脚本文件
代码块:
#!/bin/bash : Shebang指的是出现在文本文件的第一行前两个字符#!
在Unix系统中,程序会分析shebang后面的内容,作为解释器的指令,例如:
其中/bin/sh指向/bin/bash。
4.Shell命令的基本格式
command [选项] [参数]
[]表示可选的,也就是可有可无。有些命令不写选项和参数也能执行,有些命令在必要的时候可以附带选项和参数
5.运行 Shell 脚本有两种方法:
1、作为可执行程序
将上面的代码保存为 test.sh,并 cd 到相应目录:
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。
2、作为解释器参数
这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:
/bin/sh test.sh
/bin/php test.php
这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。
- Shell变量
1)普通变量
赋值:
a=“川川帅哥”
打印:
echo $a
2)只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
3)删除变量
c=“川川菜鸟”
unset c
echo $c
7、Shell 字符串
1)单双引号
字符串可以用单引号,也可以用双引号,也可以不用引号。
a=‘川川菜鳥’
b=“川川帥哥”
echo $a
echo $b
单引号特点:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
双引号特点: - 双引号里可以有变量 - 双引号里可以出现转义字符
注:我们可以理解双引号中,直接引入 name变量,是可以的,理解为字符串拼接。
2)字符串拼接
a=“chuan”
b=“chuan”
c=" b" #单引号或者双引号
echo $c
3)获取字符串长度
在上面的基础之上加上echo ${#c}即可:
4)字符串提取
a=“chuan”
b=“chuan”
c=" b"
echo $c
echo ${#c}
echo ${a:1:3} #从索引为1的开始,截取长度为3de
8、Shell 数组
1)读取索引数组
Shell 数组用括号来表示,元素用空格符号分割开。 sh文件内容为:
a=(A B “C” D)
echo $a
结果:
A
但是你是否在疑惑只输出的第一个,shell里我们不能像别的语言一样,直接输出全部,因此我们要修改一下。 改为这样:
a=(A B “C” D)
echo ${a[0]}
echo ${a[1]}
echo ${a[2]}
echo ${a[3]}
2)获取数组中的所有元素
如果想一次性全部输出,并不想通过索引来输出怎么办?使用@ 或 * 可以获取数组中的所有元素,在上面的基础上我再编辑加两行:
a=(A B “C” D)
echo ${a[0]}
echo ${a[1]}
echo ${a[2]}
echo ${a[3]}
echo “數組元素依次如下:${a[@]}”
echo “數組元素依次如下:${a[*]}”
3)获取数组的长度
在前面的基础之上加上#:
echo “數組元素個數爲:${#a[@]}”
echo “數組元素個數爲:${#a[*]}”
9、shell运算符
算术运算符
演示其中一部分,其它则类似:
a=10
b=20
val=expr $a + $b
echo “a + b : $val”
val=expr $a - $b
echo “a - b : $val”
val=expr $a \* $b
echo “a * b : $val”
val=expr $b / $a
echo “b / a : $val”
val=expr $b % $a
echo “b % a : $val”
if [ $a == $b ]
then
echo “a 等于 b”
fi
if[ $a != $b ]
then
echo “a不 等于 b”
fi
注意事项:
表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
完整的表达式要被 两个反引号 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
乘号(*)前边必须加反斜杠()才能实现乘法运算;
if…then…fi 是条件语句,后续将会补充讲解。
10、Shell echo命令
1)显示普通字符串
echo “hello world”
2)显示转义字符
echo ““hello world””
3)显示换行
echo -e “hello\n” #-e 开启转义
4)显示不换行
echo -e “chuan! \c” # -e 开启转义 \c 不换行
5)显示结果重定向至文件
定向至test7.sh文件:
echo “hello world” >test7.sh
6)显示执行时间
echo date
这里又到了最后了,补充一下printf跟echo命令是一样的作用,因此我就不演示了,统一用echo来输出。
- 点赞
- 收藏
- 关注作者
评论(0)