Shell脚本——Shell编程规范及变量
Shell编程规范及变量
- 一、Shell脚本概述
- 1.1.1 Shell基本概念
- 1.1.2 Shell脚本应用场景
- 1.1.3 Shell作用——翻译官
- 二、shell编程规范
- 2.1 用户登录shell
- 2.2 shell脚本的组成
- 2.3 shell脚本的执行方法
- 2.4 脚本错误
- 2.5 重定向
- 交互式硬件设备
- 重定向操作
- 2.6 管道操作
- 三、Shell 脚本变量
- 3.1 自定义变量
- 3.1.1 数值变量的运算
- 3.2 环境变量
- 3.3 位置变量
- 3.4 预定义变量
- 3.5 使用awk值提取IP值
- 3.6 全局变量与局域变量
- 【扩充】
一、Shell脚本概述
1.1.1 Shell基本概念
- 将要执行的命令按顺序保存到一个文本文件
- 给该文件可执行权限
- 可结合各种Shell控制语句以完成更复杂的操作
1.1.2 Shell脚本应用场景
- 重复性操作
- 交互性任务
- 批量事务处理
- 服务运行状态监控
- 定时任务执行
1.1.3 Shell作用——翻译官
shell是一个特殊的应用程序,它介于操作系统内核和用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
二、shell编程规范
2.1 用户登录shell
- 登录后默认使用的shell程序,一般为/bin/bash
- 不同shell的内部指令、运行环境等会有所不同
shell | 说明 |
---|---|
bash | $基准于GNU的框架下发展出的shell |
csh | 语法有点类似于C语言的shell |
tcsh | 整合了csh,提供更多的功能(增强版) |
sh | 已经被bash所替换(软链接) |
nologin | 奇怪的shell,这个shell可以让用户无法登录主机 |
2.2 shell脚本的组成
- 脚本申明(解释器): 若第一行为“#!/bin/bash”,表示此行一下的代码语句是通过/bin/bash程序来结实执行,#!/bin/bash为默认解释器,还有其他类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。
- 注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时将不被执行。
- 可执行语句: 比如 echo命令,用于输出“ ”之间的字符串。
2.3 shell脚本的执行方法
方法一:指定路径的命令,要求文件必须有x权限
- 指定绝对路径:/root/first.sh
- 指定相对路径:./first.sh
方法二:指定shell来解释脚本,不要求文件必须有x权限
- sh 脚本路径:sh first.sh
- source 脚本路径:.first.sh 或者source first.sh
方法三:source 脚本路径执行shell脚本
2.4 脚本错误
命令错误:命令出错不会影响接下来的命令继续
语法错误:会影响接下来的命令继续
逻辑错误:只能自己去筛查
查找代码的正确:bash -n 脚本名称 (不在当前目录下加绝对路径) 检查语法错误
bash -x 脚本名称 (不在当前目录下加绝对路径) 检查逻辑错误
2.5 重定向
交互式硬件设备
标准输入:从该设备接收用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:通过该设备报告执行出错信息
类型 | 设备文件 | 文件描述编号 | 默认设备 |
---|---|---|---|
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
重定向操作
类型 | 操作 | 用途 |
---|---|---|
重定向输入 | < | 从指定文件读取数据 |
重定向输出 | > | 将标准输出结果保存到指定的文件,并且覆盖原有文件 |
>> | 将标准输出追加到指定的文件的尾部,不覆盖原有内容 | |
标准错误输出 | 2> | 将错误信息保存到指定文件,并且覆盖原有文件 |
2>> | 将错误信息追加到指定文件的尾部,不覆盖原有内容 | |
混合输出 | &>和2>&1 | 将标准输出,标准错误保存到同—文件中 |
案例一
将标准输出结果“132456” 保存到文件 passwd.txt; 然后标准输入密码给niangao的时候,从指定文件 passwd.txt中读取数据:
案例二
“>” 会覆盖原有文件
“>>” 不会覆盖原有文件
案例三:&用法
2>/dev/null ##把错误输出到黑洞
>/dev/null 2>&1 ##标准输出重定向到黑洞,错误输出2重定向到标准输出(标准输出和错误输出都到黑洞)
2>&1>/dev/null ##错误输出重定向到标准输出,标准输出进黑洞
补充
2.6 管道操作
将管道符号 “|” 左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道
使用格式:
cmd1 命令1 | cmd2 命令2[… | cmdn 命令n]
管道操作
awk -F: '{print $1,$3}' ##意为强制输出信息并且打印第一列和第三列
三、Shell 脚本变量
各种Shell环境中都是用到了“变量”的概念。Shell变量用来存放系统和用户需要使用的特定参数值。
变量的作用
用来存放系统和用户需要使用的特定参数(值)
变量名: 使用固定的名称,由系统预设或用户定义
变量值: 能够根据用户设置、系统环境的变化而变化
变量的类型
自定义变量: 由用户自定义、修改和使用
特殊变量: 环境变量,只读变量,位置变量,预定义变量
环境变量:由系统维护,用于设置工作环境
只读变量: 用于变量值不允许被修改的情况
位置变量:通过命令行给脚本程序传递参数
预定义变量:bash中内置的一类变量,不能直接修改
3.1 自定义变量
1.定义新的变量:
格式: 变量名=变量值
[root@pxw ~]# product=c++
2.查看定义的变量的值:
格式:echo $变量名
[root@pxw ~]# version=3.5.1
3.变量赋值的特殊操作
引号 | 说明 |
---|---|
双引号 | 允许通过$符号引用其他变量 |
单引号 | 禁止引用其他变量值,$视为普通字符 |
反撇号 | 命令替换,提取命令执行后的输出结果 |
4.read命令
--------方法一:read命令获取输入内容---------
read [-p "提示信息"] 变量名
echo $变量名
[root@pxw ~]# echo 192.168.61.128 > ip.txt
[root@pxw ~]# read -p "input your IP" < ip.txt
[root@pxw ~]# echo $IP
192.168.100.10--------方法二:在脚本中编写,在命令行实现read获取---------
read 变量名
echo $变量名
方法一:
方法二:
5.设置变量的作用范围
export 变量名=变量
3.1.1 数值变量的运算
运算符:+ 加法、- 减法、* 乘法、/除法、% 取余
expr 变量1 运算符 变量2
var=$(expr 变量1 运算符 变量2)
var=$((变量1 运算符 变量2))
var=$[变量1 运算符 变量2]
let var=变量1 运算符 变量2i++相当于i=$[$i + 1],i++是先赋值,再运算
i--相当于i=$[$i - 1],++i是先运算再赋值
i+=1相当于i=$[$i + 1]----扩充-----
[root@Kiro shell]# expr $[2 * 2] ##在中括号中可以直接用正常运算符
案例一:取余只需要除后的余数
#法一
[root@localhost data]#expr 3 % 2
1#法二:定义变量,使用反撇号
[root@Kiro shell]# sum=`expr $X + $X + $Y`
[root@Kiro shell]# echo $sum
301
案例二:乘号的扩展
案例三:脚本
3.2 环境变量
环境变量指的是出于运行需要而由Linux系统提前创建的一类变量,主要用于设置用户的工作环境,包括用户宿主目录、命令查找路径、用户当前目录、登录终端等。环境变量由Linux系统自动维护,会随着用户状态的改变而改变:
- 如果修改之后,(uname) ,重启就可以恢复原样;
- 或者把之前的复制过来直接赋值变量
通过env命令进行查看,都是设定好的:
HOSTNAME=Kiro
SHELL=/bin/bash
HISTSIZE=1000
USER=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root/shell
案例:
3.3 位置变量
为了使用Shell脚本程序时,方便通过命令行为程序提供参数,bash引入了位置变量的概念。
[root@Kiro shell]# cat vars.sh
#!/bin/bashecho $1
echo $2
echo $3
[root@Kiro shell]# ./vars.sh 11 22 cc
11
22
cc
案例:
3.4 预定义变量
与定义变量是bash预先定义好的一类特殊变量,只能使用不能创建新的:
$# :表示命令行中位置参数的个数
$*: 表示所有未知参数的内容
$?: 表示前一条命令执行后的返回状态,为0表示执行正确,非0表示执行出现异常;
$0: 表示当前执行的脚本或程序的名字
$$: 表示当前脚本的进程号
案例:
3.5 使用awk值提取IP值
[root@Kiro shell]# ip=`ifconfig ens33|awk /netmask/'{print $2}'`
[root@Kiro shell]# echo $ip
192.168.61.100
3.6 全局变量与局域变量
- 全局变量
全局变量用 export
[root@Kiro ~]# export Y=22
[root@Kiro ~]# echo $Y
22
- 局域变量
局域变量只在当前有效
[root@Kiro ~]# a=100
[root@Kiro ~]# echo $a
100
[root@Kiro ~]# exit
exit
[root@Kiro ~]# echo $a
可在pstree里查看子变量
【扩充】
- uname -p ##查询处理器型号
- /dev/null ##空洞,错误输出可以放进去
- 命令行输入“bc”==Linux的计算机
- 永久 /etc/profile
Shell脚本——Shell编程规范及变量相关推荐
- shell脚本详解(一)——Shell编程规范与变量
详解Shell编程规范与变量 一.Shell脚本概述 1.shell脚本的概念 2.shell脚本应用场景 3.shell的作用--命令翻译器,"翻译官" 二.用户的登录shell ...
- Shell脚本:shell编程规范与变量
shell编程规范与变量 一.概述:解释器,编译器,翻译官. 1.定义: 2.作用: 3.应用场景: 4.登录: 5.shell脚本基本格式: 二.重定向与管道操作: 1.交互式硬件设备: 2.重定向 ...
- 【拔刀吧少年】之shell编程规范与变量
shell编程规范与变量 一.Shell脚本概述 1.shell脚本的概念 2.shell脚本应用场景 3.shell的作用--命令翻译器,"翻译官"(`又称命令的组合`) 二.用 ...
- linux 脚本编写 -eq,关于shell脚本基础编程第四篇
shell脚本基础编程第四篇 本章主要内容:函数 函数 function: function 名称 { 命令 ; } 或 name () { 命令 ; } 定义 shell 函数. 创建一个以 NAM ...
- Shell脚本攻略02-玩转变量与环境变量
概述 变量是任何一种编程语言都必不可少的组成部分,用于存放各类数据. 脚本语言通常不需要在使用变量之前声明其类型.只需要直接赋值就可以了. 在Bash中,每一个变量的值都是字符串. 无论你给变量赋值时 ...
- shell脚本——shell函数详解
shell脚本--shell函数详解 一.shell函数 1.shell函数的概念 2.shell函数的格式 (1)函数的定义 (2)调用函数的方法 3.函数返回值 4.函数传参 5.函数变量的作用范 ...
- Shell编程规范与变量(shell编程规范,执行脚本文件的四种方式,管道符号与重定向,shell变量的作用于类型)
文章目录 Shell脚本概述 Shell脚本的概念 Shell的作用 Shell编程规范 重定向与管道 Shell脚本变量 自定义变量 特殊变量 Shell脚本概述 Shell Script ,She ...
- linux 脚本 整数 赋值,shell基础!!熟悉编程规范与变量
一.SHELL规范 SHELL简单介绍 Bash(/bin/bash)是目前大多数 Linux 版本采用的默认 Shell.Bash 的全称为 Bourne Again Shell,是最受欢迎的开源软 ...
- shell脚本编程规范与变量
shell的作用: 环境: 平台:VMware workstation 14 系统:CentOS Linux release 7.4.1708 (Core) 编写第一个shell脚本: 注: sh ...
最新文章
- elasticsearch index 之 put mapping
- django模板中使用JQ代码实现瀑布流显示效果
- JavaScript 学习中的帮助记忆(日积月累)
- XML::Simple与Data::Dumper在Perl中的使用
- MDK:assert_param函数未定义的错误:Error: L6218E
- iOS开发 Xcode8中遇到的问题及改动
- git ssh 绑定 GitLab
- 二年级小学生四则运算30道题目
- 设置IDEA显示Services窗口,方面服务启动关停等操作
- 什么样的人最适合创业?
- linux授权命令chmod777_【HDFS篇02】HDFS命令行操作
- 解决web网站被挂马清除方法
- java 反编译 exe_Java反编译
- 计算机的病毒防治教案,小学信息技术《防治计算机病毒-计算机病毒》教案
- 罗技G29方向盘linux下的开发
- NTC热敏电阻温度计算以及C语言实现
- zoj 3551 Bloodsucker 概率DP
- hdu 4826 Labyrinth【DP】
- 注意力机制-多头注意力
- 【CSDN AI周刊】第16期 | 黄仁勋怒怼TPU 龙之队惜败冷扑大师
热门文章
- Sklearn实现普通最小二乘法
- stm32f107基本资料
- 最新emoji表情代码大全_中老年表情包:微信朋友圈早晨问候语带图片 最新早上好问候语动态图片大全...
- 关于如何在chrome中下载网页flash视频
- mongo-java 实现使用and拼接多个or查询条件
- Mc模组开发--Java版的环境搭建
- 百度地图坐标转高德地图坐标
- 2021年 IOS的发布流程(企业版那 无法下载,无法安装)
- 小米网卡驱动linux,小米笔记本pro 15.6寸安装ubuntu16.04无法使用wifi的解决方法
- Keep不甘做“工具人”