shell编程规范与变量
Posted 呼噜呼噜懒洋洋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ~]# 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 > shell编程规范与变量