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脚本相关推荐

  1. shell编程基础笔记

    第一部分shell编程基础 1shell简介 什么是shell 存取权限和安全 shell简单脚本 shell特性 1.1什么是shell shell是核心程序kernel之外的指令解析器,是一个程 ...

  2. Linux Shell编程基础

    linux系统下给命令指定别名alias命令用法: 在linux系统中如果命令太长又不符合用户的习惯,那么我们可以为它指定一个别名.虽然可以为命令建立"链接"解决长文件名的问题,但 ...

  3. 「Linux」Linux Shell 编程基础入门

    Linux Shell 编程基础入门 1. 变量 1.1 变量定义 1.2 使用变量 1.3 引号 1.4 将命令的结果赋值给变量 1.5 位置参数 1.6 特殊变量及其含义 2. 字符串 2.1 字 ...

  4. 【⛔拒绝内卷,学会shell,走遍天下都不怕⛔】shell编程基础

    shell编程基础 shell简介 属性 shell是一个命令行解释器,建立了用户和操作系统之间的接口.当我们在命令行输入一个命令后,shell会对命令进行解释,调用相应的程序去执行.shell是一种 ...

  5. Linux网络编程基础知识

    Linux网络编程基础知识 1. 协议的概念 1.1 什么是协议 1.2 典型协议 2 网络应用程序设计模式 2.1 C/S模式 2.2 B/S模式 2.3 优缺点 3 分层模型 3.1 OSI七层模 ...

  6. Linux 操作系统编程基础知识

    Linux操作系统 1.Linux 操作系统编程基础知识 1.3 系统调用和库函数 1.3.1 接口 命令接口:以命令形式呈现在用户面前,方便用户直接或间接控制自己的作业. 程序接口:为应用程序使用系 ...

  7. Shell编程基础常用代码1

    Shell编程 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Sp ...

  8. Linux网络编程基础1(网络应用程序设计模式,分层模型,协议格式)

    Linux网络编程基础(网络应用程序设计模式,socket编程,inet_pton,inet_ntop,服务端创建连接的过程,客户端创建连接的过程,socket函数封装) 1. 网络应用程序设计模式 ...

  9. Linux网络编程基础和一步一步学

    ·Linux网络编程 基础(一) ·Linux网络编程 基础(二) ·Linux网络编程 基础(三) ·Linux网络编程 基础(四) ·Linux网络编程 基础(五) ·Linux网络编程 基础(六 ...

最新文章

  1. 以系统时间命名文件方法(C++)
  2. 编程语言python培训-0基础转行IT,编程语言应该学习Java还是Python呢?
  3. 【EventBus】EventBus 源码解析 ( 注册订阅者 | 订阅方法 | 查找订阅方法 )
  4. 如果在系统里面无法格式化磁盘可以尝试以下方法
  5. windows杀死指定端口号
  6. java底层原理书籍_阿里面试题:Java中this和super关键字的底层实现原理
  7. 大四中软实习笔记20130226
  8. 模糊逻辑系统_在模糊逻辑系统中工作 人工智能
  9. Apache Nifi 入门与进阶 GitChat连接
  10. overleaf表格_latex 表格制作
  11. IPC 中 LPC、RPC 的区别和联系
  12. 只有八维数字,才能还原宇宙的本质?
  13. sublime与python交互
  14. html显示作者信息,HTML基础 meta name author 添加网页作者的信息
  15. citirx for wincor configuration (citrix 7.5 setup with WI)
  16. linux内核奇遇记之md源代码解读之五
  17. fscapture下载收费吗?_如今听歌要收费,下载也要付费,你能接受国内音乐App这种改变吗...
  18. 华为手机asph啥机型_2020年最值得买大品牌手机盘点:华为vivo等五款机型入围
  19. 关于机器人运动学与动力学建模的几点领悟
  20. 28岁自学编程会不会太晚了?靠谱吗?

热门文章

  1. 月入14万!字节女技术员薪资曝光:是金子总会发光!
  2. osgEarth示例分析——osgearth_splat
  3. js语句末尾是否需要加分号?
  4. (mac)IDEA配置git
  5. 青少年有压力如何缓解呢?
  6. Ueditor增加文字竖排显示和从右向左输入(支持蒙古文和维吾尔文)
  7. android手机卡怎么办,安卓手机卡慢怎么办 安卓手机卡慢解决方案【详解】
  8. 拼图算法,将零碎小图,整理到一张大图之上,自动合并。二叉树实现
  9. php的toarray,PHP SplFixedArray toArray()用法及代码示例
  10. 【jquery ajax】实现文件上传提交