shell编程规范与变量

追风赶月莫停留,平芜尽处是春山。这篇文章主要讲述shell编程规范与变量相关的知识,希望能为你提供帮助。
shell 脚本概述Shell脚本的概念  
【shell编程规范与变量】Shel1是一个面向字符串的编程语言,可以跟python之类的其他语言配合起来,比如某个复杂的功能使用一个python脚本来实现。   
然后在shell中调用这个脚本实现较复杂的功能, 或者反过来,在Python脚本中调用外部的Shell脚本来提高自动化的效率,也是可以的。

脚本性语言)弱类型语言;
就是将命令按顺序一一列出, 最后自动执行
执行需要权限,也可以直接使用绝对路径
脚本其实不复杂,通用脚本环境改变后依然可以使用的脚本

Shell脚本应用场景
重复性操作
交互性任务(自动化运维)
批量事务处理
服务运行状态监控
定时任务执行

Shell的作用----命令解释器, “翻译官”
介于系统内核与用户之间,负责解释命令行:
接受用户输入的操作指令,并进行解释,将需要执行的操作传递给内核执行,并输出执行结果


linux中常见的shell
登录后默认使用的Shell程序,一般为/bin/bash
不同Shell的内部指令、运行环境等会有所区别
用户常用shell:
***检查一下/etc/shells这 个文件,里面就是Linux所包含的Shell。
最常用的就是bash、tcsh、 csh、sh、 nologin这些shell。
这些shell都是依据Linux发展者的不同所创造出的不同版本。
Linux发展者的不同所创造出的不同版本。
bash:基准于GNU的框架下发展出的Shell。
csh:语法有点类似于c语言的Shell。
tcsh:整合了csh,提供更多的功能。.
sh:已经被bash所替换。
nologin:奇怪的shell, 这个shel1可以让用户无法登录主机。

注: bash (/bin/bash)是目前大多数Linux 版本采用的默认Shell.
思考1:为什么系统上合法的Shell要写入/etc/shells这个文件呢?
  答:这是因为系统某些服务运行过程中,会去检查用户能够使用的Shell,而这些shell的查询就是借由/etc/shells这个文件。
思考2:用户什么时候可以取得shell来工作?用户默认会取得哪一个shell?
当用户登录的时候,系统就会给我一个shell让我来用, 而这个登录取得的Shell就记录在/etc/passwd这个文件内。
shell脚本的作用
自动化运维
批量化重复操作可以编写脚本结合计划任务自动周期运行
减轻管理员工作量
提高处理文本文件的速度
避免配置出错

shell脚本的构成
1.脚本申明(解释器) :第一行开头“#!/bin/bash",
表示此行以下的代码语句是通过/bin/bash程序来解释执行。
#!/bin/bash为默认的解释器还有其他类型的解释器;
例如:#!/bin/python、#!/bin/expect
2.注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行;
3.可执行语句:比如echo命令,用于输出“ ”之间的字符串

示例:
vim /root/first.sh

#!/bin/bash
# This is my first Shell-Script.
cd /boot
echo "当前的目录位于:"
pwd
echo "其中以 vml 开头的文件包括:"
ls -lh vml*



脚本执行逻辑及执行方式 脚本执行逻辑
顺序执行:程序按从上到下顺序执行
选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
循环执行:程序执行过程中需要重复执行多次某段语句

脚本执行方法
方法一:指定路径去执行文件(文件本身需要有执行权限)  
[root@localhost ~]# chmod +x /root/frist.sh#加权限bash环境变量
指定相对路径 ./host.shfrist
指定绝对路径 /root/host.sh


方法二:指定Shell来解释脚本,不要求文件必须有x权限。
sh/bash 指定某个shell来解释脚本语句
例:sh yum.sh、bash yum.sh(使用指定shell执行脚本使用的是脚本中shell环境)
source 通过内部命令加载文件中的源代码也可以通过“.”来执行
例:Source yum.sh 或 . yum.sh
(source 或 .执行脚本使用的是当前用户所使用的脚本)


重定向与管道操作管道操作
管道操作作用:管道操作作为不同命令之间的协同工作提供了一种机制;
解释:位于管道符号“|”左侧的命令输出的结果,将作为右侧命令的输入对象,
且一条命令可以使用多个“|”。
例:cat /etc/passwd | grep "/bin/bash$" | awk -F: print $1,$7


重定向
交互式硬件设备
标准输入:从该设备接收用户输入的数据;
标准输出:通过该设备向用户输出数据;
标准错误输出:通过该设备报告执行出错信息;

类型
设备文件
文件描述编号
默认设备
标准输入
/dev/stdin
0
键盘    /dev/pts0
标准输出
/dev/stdout
1
显示器 /dev/pts1
标准错误输出
/dev/stderr
2
显示器 /dev/pts2
重定向操作
类型
操作符
用途
重定向输入
<
从指定的文件读取数据,而不是从键盘输入
重定向输出
>
将输出结果保存到指定的文件(覆盖原有内容)
> >
将输出结果追加到指定的文件尾部   (没有文件可以自动创建文件,不能创建目录)
标准错误输出
2>
将错误信息保存到指定的文件(覆盖原有内容)
2> >
  将错误信息追加到指定的文件中
混合
输出
& >
将标准输出、标准错误的内容保存到同一个文件中
> ...2> & 1
将标准错误输出重定向到标准输出
示例1:
echo "123456" > pass.txt
passwd --stdin zhangsan < pass.txt
#从pass.txt文件中取mima,需要注意 SELinux 会影响此命令执行,
若执行失败可尝试关闭SELinux即setenforce 0
示例1:
ls -lh >

    推荐阅读