Linux shell编程基础(1) —— 构建基本的shell脚本
1、创建shell脚本文件以及执行shell脚本方法
(1)使用编辑器(如vim)创建一个文件test.sh,文件后缀为.sh。
(2)在第一行指定要使用的shell 格式如下
#!/bin/bash
(3)将shell命令添加到创建的文件中,并保存退出
(4)执行脚本文件
在执行脚本文件之前要让shell找到我们创建的文件test。那么如何让shell找到我们的文件呢。通常用以下两种方法
a、将shell脚本文件所在的目录添加的PATH环境变量中
b、在命令提示符后用绝对或者相对文件路径用来引用shell脚本
实例:创建一个shell脚本,输出一段字符串
代码段:
#!/bin/bashstr="hello"echo $str
执行过程:
这里我们在命令提示符后用相对文件路径用执行shell脚本test,但是提示没有执行权限。通过chmod命令给文件所有者添加执行权限。执行结果在终端输出hello
2、使用echo命令显示文本消息
echo 命令添加到shell脚本中的任何需要显示额外信息的地方,用法为
echo + 字符串 默认字符串输出后换行
echo -n + 字符串 -n 表示字符串输出后不换行
在一般情况下,字符串不需要使用双引号(“”)和单引号(‘’)来划定文本字符串。但是在字符串中使用到了它们,就必须使用其中一种将字符串划定起来
实例:
#!/bin/bashecho This is test1
echo "This's test2"
echo 'This is test3'echo "The time and date are:"
dateecho -n "The time and date are:"
date
运行结果:
其中date命令显示当前时间和日期
3、在shell中使用变量
在shell脚本中我们可以使用的变量有以下两种
a、环境变量
b、用户自定义变量
3.1 环境变量
我们可以用set命令查看当前shell下所有的环境变量
在脚本中,我们可以在环境变量名称前用美元符合$来使用这些变量
$变量名或者${变量名}
实例:test.sh
#!/bin/bashecho "USER: $USER"echo "UID: $UID"echo "HOME: $HOME"
执行结果
其中环境变量USER、UID、HOME 分别表示登录到系统的用户名、用户的系统ID、用户的默认主目录
3.2 用户自定义变量
(1)用户变量可以是由任何数字、字母以及下划线组成的文本字符串,长度超过20个。
(2)用户变量区分大小写。例如变量var1与变量Var1则不等价
(3)使用等号(=)给变量赋值,注意变量、等号、值之间不能有空格
(4)shell脚本会自动决定变量值的数据类型,无需用户定义。
(5)在shell中声明的变量的生命周期直到shell脚本结束。在shell脚本中声明的变量为全局的
实例:
#!/bin/bashname1="user1"
age1="18"name2="user2"
age2=$age1echo "name1: $name1 age1: $age1"
echo "name2: $name2 age2: $age2"
执行结果
备注:引用一个变量值需要使用美元符号$,而在引用变量对其赋值时则不用使用美元符。一句话就是,在引用变量的值时使用美元符号$,而在对变量进行操作时不使用$
3.3 命令替换
命令替换指的是我们可以从命令输出中提取信息,并将其赋值给变量。
将命令的输出赋值给变量的两种方法
a、使用反引号( ` 左上角与波浪线~同一位置)
b、使用 $() 格式
实例:通过命令替换获取到当前的日期,并用它来生成唯一的文件名
#!/bin/bashtoday=$(date +%y%m%d)
ls -al /mnt/c/Users/qiaobao/home > log.$today
执行结果:在home目录下生成一个log.210729的日志文件,用cat命令查看可以看到将ls命令的结果重定向输出到了日志文件中
4、重定向与管道
重定向指的是命令的输出可以输出到另一个位置,而不仅仅是让它显示到终端显示器上。
重定向分为以下两种
a、输出重定向
b、输入重定向
4.1 输出重定向
输出重定向分为一般输出重定向和追加重定向
一般输出重定向(>)
特点:当指定的输出文件已经存在,重定向操作会用新的文件数据覆盖已有文件
追加重定向(>>)
特点:不会覆盖原有的文件,会在原有的文件末尾追加数据
实例1: 将ls 命令的输出重定向到outfile文件中,当outfile文件不存在是会创建一个新的文件。当outfile文件存在时会覆盖原有文件(可以理解为删除了原来的outfile,然后创建了一个新的outfile文件)。
实例2:使用ll 命令将原来的outfile覆盖
实例3:使用echo 命令将111输出到outfile文件中,将outfile文件覆盖。ls 命令的输出追加的到outfile文件中
4.2 输入重定向
输入重定向与输出重定向刚好相反,输入重定向将文件的内容重定向到命令中。输入重定向分为一般输入重定向(<)和内联输入重定向(<<)
一般输入重定向 (<)
特点:将文件中的内容作为命令的输入
内联输入重定向 (<<)
特点:无需使用文件进行重定向,只需要在命令行中指定标记符即可。
实例1:将test.sh文件中的内容重定向到wc命令中,其中wc命令的功能为对数据中的文本进行计数。默认情况会输出文本的行数、文本的词数、文本的字节数。
实例2:在命令行上使用内联输入重定向时,shell会用PS2环境变量中定义的次提示符(>)来提示你输入数据,直到你输入自己定义的标识符结束。
4.3 管道
我们将一个命令的输出作为另一个命令的输入可以用重定向来实现。
其实shell中提供另一种实现的方法,使用管道。
格式 命令1 | 命令2 (管道符 | 是两个竖线组成)
实例:
管道的特点:
(1)可以直接将命令的输出作为另一个命令的输入,两个命令中没有任何的缓冲区或中间文件
(2)在命令行中可以使用多个管道 例命令1 | 命令2 | 命令 3
备注:管道最流行的用法是将大量的输出用more命令一页一页的显示
5、shell中的数学运算
5.1 使用expr命令
expr 命令可以处理命数学表达式,
格式: expr + 表达式
实例:expr 2 + 9
以下表格是expr命令可以识别的数学和字符串操作符
在使用expr命令需要注意以下两点
(1)许多expr命令操作符在shell中有其他的含义。如 * 当我们在expr表达式中使用时需要使用转义字符\进行转义,如 expr 3 \* 5
(2)当我们在脚本中需要获取的到expr命令的值时,需要用到命令替换,如 v1=$(expr 5 + 3)
其实在shell中提供了另一种方法执行数学表达式,可以使用美元符号加方括号的方式($[ 表达式])处理数学表达式
实例:
注意:在使用方括号时,在其内部不用使用转义字符进行转义
备注:bash shell 只能支持整数运算,不支持浮点数运算
5.2 bash计算器 — bc
1、expr 命令只能处理整数运算,要想处理浮点数运算,可以使用shell内建的bash计算器 — bc
特点:
(1)bc 可以识别数字(整数和浮点数)、变量(简单变量和数组)、注释(#或者c语言中的/* ... */)、表达式、函数、编程语句(if-then语句)
(2)使用bc,必须用quit才能退出
(3)可以改变scale变量的值,从而改变精度。即保留小数点多少位。默认scale=0
(4)-q 命令行选项可以不显示欢迎提示信息
实例:
2、在脚本中使用bc
基本格式:
变量=$(echo "操作1;表达式" | bc)
操作1可以允许你设置变量,多个变量用分号隔开。表达式定义了bc中的数学表达式
实例:
当我们需要进行大量计算时,在脚本中可以使用内联输入重定向(<<)对bc进行多个输入
实例:test.sh
#!/bin/bashv1=$(bc << EOF
v1=10
v2=1
v3=2
scale=4
v1 / (v2 + v3)
EOF
)
echo $v1
执行结果:
备注:在bc中的变量只能在bc中有效。而且在bc中可以不用$直接使用变量的值
Linux shell编程基础(1) —— 构建基本的shell脚本相关推荐
- shell编程基础笔记
第一部分shell编程基础 1shell简介 什么是shell 存取权限和安全 shell简单脚本 shell特性 1.1什么是shell shell是核心程序kernel之外的指令解析器,是一个程 ...
- Linux Shell编程基础
linux系统下给命令指定别名alias命令用法: 在linux系统中如果命令太长又不符合用户的习惯,那么我们可以为它指定一个别名.虽然可以为命令建立"链接"解决长文件名的问题,但 ...
- 「Linux」Linux Shell 编程基础入门
Linux Shell 编程基础入门 1. 变量 1.1 变量定义 1.2 使用变量 1.3 引号 1.4 将命令的结果赋值给变量 1.5 位置参数 1.6 特殊变量及其含义 2. 字符串 2.1 字 ...
- 【⛔拒绝内卷,学会shell,走遍天下都不怕⛔】shell编程基础
shell编程基础 shell简介 属性 shell是一个命令行解释器,建立了用户和操作系统之间的接口.当我们在命令行输入一个命令后,shell会对命令进行解释,调用相应的程序去执行.shell是一种 ...
- Linux网络编程基础知识
Linux网络编程基础知识 1. 协议的概念 1.1 什么是协议 1.2 典型协议 2 网络应用程序设计模式 2.1 C/S模式 2.2 B/S模式 2.3 优缺点 3 分层模型 3.1 OSI七层模 ...
- Linux 操作系统编程基础知识
Linux操作系统 1.Linux 操作系统编程基础知识 1.3 系统调用和库函数 1.3.1 接口 命令接口:以命令形式呈现在用户面前,方便用户直接或间接控制自己的作业. 程序接口:为应用程序使用系 ...
- Shell编程基础常用代码1
Shell编程 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Sp ...
- Linux网络编程基础1(网络应用程序设计模式,分层模型,协议格式)
Linux网络编程基础(网络应用程序设计模式,socket编程,inet_pton,inet_ntop,服务端创建连接的过程,客户端创建连接的过程,socket函数封装) 1. 网络应用程序设计模式 ...
- Linux网络编程基础和一步一步学
·Linux网络编程 基础(一) ·Linux网络编程 基础(二) ·Linux网络编程 基础(三) ·Linux网络编程 基础(四) ·Linux网络编程 基础(五) ·Linux网络编程 基础(六 ...
最新文章
- 以系统时间命名文件方法(C++)
- 编程语言python培训-0基础转行IT,编程语言应该学习Java还是Python呢?
- 【EventBus】EventBus 源码解析 ( 注册订阅者 | 订阅方法 | 查找订阅方法 )
- 如果在系统里面无法格式化磁盘可以尝试以下方法
- windows杀死指定端口号
- java底层原理书籍_阿里面试题:Java中this和super关键字的底层实现原理
- 大四中软实习笔记20130226
- 模糊逻辑系统_在模糊逻辑系统中工作 人工智能
- Apache Nifi 入门与进阶 GitChat连接
- overleaf表格_latex 表格制作
- IPC 中 LPC、RPC 的区别和联系
- 只有八维数字,才能还原宇宙的本质?
- sublime与python交互
- html显示作者信息,HTML基础 meta name author 添加网页作者的信息
- citirx for wincor configuration (citrix 7.5 setup with WI)
- linux内核奇遇记之md源代码解读之五
- fscapture下载收费吗?_如今听歌要收费,下载也要付费,你能接受国内音乐App这种改变吗...
- 华为手机asph啥机型_2020年最值得买大品牌手机盘点:华为vivo等五款机型入围
- 关于机器人运动学与动力学建模的几点领悟
- 28岁自学编程会不会太晚了?靠谱吗?
热门文章
- 月入14万!字节女技术员薪资曝光:是金子总会发光!
- osgEarth示例分析——osgearth_splat
- js语句末尾是否需要加分号?
- (mac)IDEA配置git
- 青少年有压力如何缓解呢?
- Ueditor增加文字竖排显示和从右向左输入(支持蒙古文和维吾尔文)
- android手机卡怎么办,安卓手机卡慢怎么办 安卓手机卡慢解决方案【详解】
- 拼图算法,将零碎小图,整理到一张大图之上,自动合并。二叉树实现
- php的toarray,PHP SplFixedArray toArray()用法及代码示例
- 【jquery ajax】实现文件上传提交