linux shell 编程

shell的作用

  • shell是用户和系统内核之间的接口程序
  • shell是命令解释器

shell程序

Shell程序的特点及用途:

  • shell程序可以认为是将shell命令按照控制结构组织到一个文本文件中,批量的交给shell去执行

  • 不同的shell解释器使用不同的shell命令语法

  • shell程序解释执行,不生成可以执行的二进制文件

  • 可以帮助用户完成特定的任务,提高使用、维护系统的效率

  • Shell使用解释型语言,不需重新编译

  • 它适合于编写执行相对简单的任务的工具,因为它更强调易于配置、维护和可移植性

  • 它不适合用来完成时间紧迫型和处理器忙碌型的任务
    image.png

变量

变量是弱类型的

  1. 声明变量不用声明类型
  2. 可以存储不同类型的内容
  3. 大小写区分

变量声明及赋值格式

格式:变量=值 (注意:等号两侧不能有空格)
例如:

  • a=”hello world”
  • a=hello world
  • b=9

变量的引用
格式:

  1. $变量名
  2. ${变量名}

变量名为一个字符用方式1,变量名多于一个字符建议用方式2
例子:

  • a=1
  • abc=“hello”
  • echo $a
  • echo ${abc}
  1. 如果字符串里包含空格,就必须用引号把它们括起来
  2. 等号两边不能有空格!!!
  3. 默认情况下,所有输入的内容都是字符串

单引号,双引号,倒引号

  • 倒引号括起来的字符串被shell解释为命令行,在执行时shell会先执行该命令行,并以它的标准输出结果取代整个倒引号部分

  • 由单引号括起来的字符都作为普通字符出现

  • 如果在参数中包含一个或多个空白字符,必须给参数加双引号。如果把一个带有$字符的变量放在双引号中,程序执行到该行时会把变量替换为它的值.

可用\字符取消$ 的特殊含义 \ $

位置变量

bash在解释用户命令时,会把所输入的命令后面的参数使用位置变量传递给bash脚本程序
$1、$2…$n分别代表参数1、参数2…参数n

$0则代表脚本的名字

有关位置变量还有另外三个。

  • $*:这个变量包括参数的列表(字符串)。
  • $@:这个变量包括参数的列表(数组)。
  • $#:这个变量包括参数的个数。

image.png

环境变量

Shell运行时自动设置的一些变量称为环境变量,由Shell维护和管理。

image.png

只在shell程序中可用的变量

image.png

数学表达式

image.png

image.png

条件判断

常见的条件:

  • 变量属性;

image.png
image.png
image.png

  • 文件属性;

image.png

  • 命令执行结果;
  • 多种条件的逻辑组合;
    判断结果的一般定义:
  • 真:0
  • 假:1
    格式:
  • test condition
  • [ condition ] #[右边和]左边需要有空格

控制结构

常见分支结构:

  • if
#!/bin/bash
echo -n "Please input a directory:”
read dir
if cd ${dir} > /dev/null 2>&1;then
echo "enter directory $dir successed”
else
echo "enter directory $dir failed”
fi

Linux系统里执行的每一个程序都有标准输入/标准输出/错误输出三个通道。
Linux所有的设备都是以文件的形式出现,因此,这里提到的三个通道,实际上就是三个文件。

  • 文件描述符 0 : 标准输入
  • 文件描述符 1 : 标准输出
  • 文件描述符 2 : 错误输出

find / -name "cd" 1> stdout.txt 2> errout.txt

&:取地址

> /dev/null 等价于1>/dev/null把标准输出的内容输出到垃圾箱

2 > &1 把错误输出的内容输出到标准输出的地址

  • case
    image.png
    模式的匹配可以使用通配符
  • ?:仅匹配一个字符
  • *:匹配任意字符
  • […]:配置方括号中的任意一个字符
  • [!..] : 不匹配方括号中的任意字符
  • [a-zA-Z] : -指定一个取值范围

常见循环结构:

  • for
#!/bin/bash
echo "Input a directory:”
read dir
for file in `ls $dir`
do
echo $file
done
  • while
  • until

image.png

image.png
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode之javascript解题(No33-34)

附上我的github仓库,会不断更新leetcode解题答案,提供一个思路,大家共勉 在我的主页和github上可以看到更多的关于leetcode的解题报告!(因为不知道为什么掘金没有将其发布出来,目前已经联系掘金客服&#x…

真实感人故事_您的数据可以告诉您真实故事吗?

真实感人故事Many are passionate about Data Analytics. Many love matplotlib and Seaborn. Many enjoy designing and working on Classifiers. We are quick to grab a data set and launch Jupyter Notebook, import pandas and NumPy and get to work. But wait a minute…

转:防止跨站攻击,安全过滤

转:http://blog.csdn.net/zpf0918/article/details/43952511 Spring MVC防御CSRF、XSS和SQL注入攻击 本文说一下SpringMVC如何防御CSRF(Cross-site request forgery跨站请求伪造)和XSS(Cross site script跨站脚本攻击)。 说说CSRF 对CSRF来说,其实Spring…

Linux c编程

c语言标准 ANSI CPOSIX(提高UNIX程序可移植性)SVID(POSIX的扩展超集)XPG(X/Open可移植性指南)GNU C(唯一能编译Linux内核的编译器) gcc 简介 名称: GNU project C an…

html怎么注释掉代码_HTML注释:如何注释掉您HTML代码

html怎么注释掉代码HTML中的注释 (Comments in HTML) The comment tag is an element used to leave notes, mostly related to the project or the website. This tag is frequently used to explain something in the code or leave some recommendations about the project.…

k均值算法 二分k均值算法_使用K均值对加勒比珊瑚礁进行分类

k均值算法 二分k均值算法Have you ever seen a Caribbean reef? Well if you haven’t, prepare yourself.您见过加勒比礁吗? 好吧,如果没有,请做好准备。 Today, we will be answering a question that, at face value, appears quite sim…

您好,这是我的第一篇文章

您好我是CYL 这是一个辣鸡博客 欢迎指教 转载于:https://www.cnblogs.com/pigba/p/8823472.html

08_MySQL DQL_SQL99标准中的多表查询(内连接)

# sql99语法/*语法: select 查询列表 from 表1 别名 【连接类型】 join 表2 别名 on 连接条件 【where 筛选条件】 【group by 分组】 【having 分组后筛选】 【order by 排序列表】分类内连接(重点): inner外连接 左外&#xff0…

java中抽象类继承抽象类_Java中的抽象类用示例解释

java中抽象类继承抽象类Abstract classes are classes declared with abstract. They can be subclassed or extended, but cannot be instantiated. You can think of them as a class version of interfaces, or as an interface with actual code attached to the methods.抽…

新建VUX项目

使用Vue-cli安装Vux2 特别注意配置vux-loader。来自为知笔记(Wiz)

衡量试卷难度信度_我们可以通过数字来衡量语言难度吗?

衡量试卷难度信度Without a doubt, the world is “growing smaller” in terms of our access to people and content from other countries and cultures. Even the COVID-19 pandemic, which has curtailed international travel, has led to increasing virtual interactio…

Linux 题目总结

守护进程的工作就是打开一个端口,并且等待(Listen)进入连接。 如果客户端发起一个连接请求,守护进程就创建(Fork)一个子进程响应这个连接,而主进程继续监听其他的服务请求。 xinetd能够同时监听…

《精通Spring4.X企业应用开发实战》读后感第二章

一、配置Maven\tomcat https://www.cnblogs.com/Miracle-Maker/articles/6476687.html https://www.cnblogs.com/Knowledge-has-no-limit/p/7240585.html 二、创建数据库表 DROP DATABASE IF EXISTS sampledb; CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8; USE sampl…

换了电脑如何使用hexo继续写博客

前言 我们知道,使用 Githubhexo 搭建一个个人博客确实需要花不少时间的,我们搭好博客后使用的挺好,但是如果我们有一天电脑突然坏了,或者换了系统,那么我们怎么使用 hexo 再发布文章到个人博客呢? 如果我们…

leetcode 525. 连续数组

给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。 示例 1: 输入: nums [0,1] 输出: 2 说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。 示例 2: 输入: nums [0,1,0] 输出: 2 说明: [0, 1] (或 [1, 0]) 是…

实践作业2:黑盒测试实践(小组作业)每日任务记录1

会议时间:2017年11月24日20:00 – 20:30 会议地点:在线讨论 主 持 人:王晨懿 参会人员:王晨懿、余晨晨、郑锦波、杨潇、侯欢、汪元 记 录 人:杨潇 会议议题:软件测试课程作业-黑盒测试实践的启动计划 会议内…

视图可视化 后台_如何在单视图中可视化复杂的多层主题

视图可视化 后台Sometimes a dataset can tell many stories. Trying to show them all in a single visualization is great, but can be too much of a good thing. How do you avoid information overload without oversimplification?有时数据集可以讲述许多故事。 试图在…

iam身份验证以及访问控制_如何将受限访问IAM用户添加到EKS群集

iam身份验证以及访问控制介绍 (Introduction) Elastic Kubernetes Service (EKS) is the fully managed Kubernetes service from AWS. It is deeply integrated with many AWS services, such as AWS Identity and Access Management (IAM) (for authentication to the cluste…

一步一步构建自己的管理系统①

2019独角兽企业重金招聘Python工程师标准>>> 系统肯定要先选一个基础框架。 还算比较熟悉Spring. 就选Spring boot postgres mybatis. 前端用Angular. 开始搭开发环境,开在window上整的。 到时候再放到服务器上。 自己也去整了个小服务器,…

面向对象面向过程

1、面向语句: 直接写原生的sql语句,但是这样代码不容易维护。改一个方法会导致整个项目都要改动, 2、面向过程 定义一些函数,用的时候就调用不用就不调用。但是这也有解决不了的问题,如果要维护需要改动代码&#xff0…