当前位置: 首页 > ds >正文

Shell编程学习笔记1-Shell入门

什么是Shell?脚本文件的基础作用?

与MS-DOS系统中的批量处理文件类似,Linux中的脚本(也叫做shell程序)是一个文本文件,里面包含各类的Linux的Shell命令。通过脚本文件将这些命令汇集在一起,就可以连续执行Shell命令。

例如:cd和pwd命令都是Shell命令,如果我写了一个脚本文件test.sh,把这两个命令都放进test.sh里面,运行这个脚本文件时,就可以连续执行文件里的两个命令。

先来写第一个Shell脚本程序:

我在/home/csu/桌面 下新建一个test.sh文件,我要实现 当我运行这个脚本文件时

1.先进入指定目录;

2.输出当前工作路径;

3.最后输出指定文件里的内容。

用到的命令有

vim test.sh
#在test.sh 里面首行输入#!/bin/bash,即
#!/bin/bash
cd /etc
pwd
tail -5 /etc/passwd写完之后用:wq退出vim编辑器,运行test.sh文件(用bash test.sh命令)

编写脚本文件时第一行写#!/bin/bash的作用是明确告诉操作系统使用位于 /bin 目录下的 bash 解释器来执行脚本

这样,一个简单的脚本文件就实现了把cd;pwd;tail三个命令汇集起来达到连续执行的效果。

如何执行Shell脚本程序?

这里介绍两个方法,依旧以刚刚创建的test.sh文件为例。

第一种:直接执行

直接输入脚本程序的绝对路径,如/home/csu/桌面/test.sh

执行结果如下,但是要使用直接执行这种方法的话,需要先对test.sh文件赋予可执行权限

第二种:使用Shell执行

直接用命令bash /home/csu/桌面/test.sh

当然如果当前工作路径已经在/home/csu/桌面 下,可以直接用bash test.sh

如下图,执行结果跟第一种方法是一样的

Shell语法之双引号“”与单引号''与转义符 \ 

当我在终端执行echo $SHELL 时,会输出该用户默认的Shell,一般输出结果是/bin/bash

那当我定义一个新的变量myname,定义时分别用双引号“”或单引号‘’时有什么不同。

用双引号时myname="my shell is $SHELL"

echo $myname输出的是my shell is /bin/bash

它会输出SHELL变量的值

[root@localhost 桌面]# echo $SHELL
/bin/bash
[root@localhost 桌面]# myname="my shell is $SHELL"
[root@localhost 桌面]# echo $myname
my shell is /bin/bash

用单引号时myname='my shell is $SHELL'

echo $myname输出的是my shell is $SHELL

它会把$SHELL当成普通字符串来输出,并不会输出SHELL变量对应的值

[root@localhost 桌面]# myname='my shell is $SHELL'
[root@localhost 桌面]# echo $myname
my shell is $SHELL

转义符\

一般定义变量时用双引号""的话是会输出SHELL变量对应的值,但是我又想用双引号,又想不调用SHELL变量的值,怎么办呢,这时候就可以用转义符 \ 了

执行结果如下:

[root@localhost 桌面]# myname="my shell is \$SHELL"
[root@localhost 桌面]# echo $myname
my shell is $SHELL

练习 :

分析以下脚本代码输出结果

#!/bin/bash

var="Hello"

echo "$var"

echo '$var'

A.Hello         B.Hello        C.$var        D.$var

   Hello             $var             Hello          $var

好吧今天的学习笔记就写到这,有一起学习Shell编程的小伙伴可以一起交流!

 

http://www.xdnf.cn/news/1506.html

相关文章:

  • 【漫话机器学习系列】219.支持向量机分类器(Support Vector Classifier)
  • Java并发编程之CompletableFuture原理与实践
  • Linux系统编程 day10 接着线程(中期头大,还要写论文)
  • 钧瓷产业原始创新的许昌共识:技术破壁·产业再造·生态重构(一)
  • C++入门基础知识110—【关于C++嵌套 if 语句】
  • 使用 LangChain 掌握检索增强生成 (RAG) 的终极指南:6、索引
  • Linux:41线程控制lesson29
  • Linux安全防护:全方位服务安全配置指南
  • gem5教程第六章 为ARM扩展gem5 这也是改进gem5的一个基础
  • STM32F103 “BluePill” 上的 DMA 原理与实践
  • 「ES数据迁移可视化工具(Python实现)」支持7.x索引数据互传
  • unity游戏开发之 拖放教程2D
  • 代理ip池有哪些类型?代理IP池的定义、特点与使用场景
  • leetcode0099. 恢复二叉搜索树- medium
  • 在基于Transformer的LLM中,将越重要的提示词前置,对生成效果越好吗
  • LeetCode算法题(Go语言实现)_58
  • 122.在 Vue3 中使用 OpenLayers 实现图层层级控制(zIndex)显示与设置详解
  • CIFAR-10图像分类学习笔记(一)
  • vim的.vimrc配置
  • 【Java面试笔记:基础】11.Java提供了哪些IO方式? NIO如何实现多路复用?
  • 哪些心电图表现无缘事业编体检呢?
  • Linux程序地址空间
  • 【maven-7.1】POM文件中的属性管理:提升构建灵活性与可维护性
  • 《Cesium 中两点绘制线的实现:实线、虚线、动态线、流动线详解》
  • 元素滚动和内容垂直居中同时存在,完美的 html 元素垂直居中的方法flex + margin: auto
  • Java 中 String 转 Integer 的方法与底层原理详解
  • Elasticsearch(ES)中的脚本(Script)
  • 设备沟通不再“鸡同鸭讲”EtherCAT转Profinet网关助力工业互联新升级!
  • SpringMVC从入门到上手-全面讲解SpringMVC的使用.
  • BUUCTF jarvisoj_test_your_memory