shell脚本

1、什么是shell

什么是shell

Shell(外壳) 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。 Shell 既是一种命令语言又是一种程序设计语言

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

什么是脚本?

脚本只是一段可以看到的文本命令(例如,您可以用记事本打开并编辑它)。

[En]

A script is simply a piece of text commands that can be seen (for example, you can open it with notepad and edit it).

常见的脚本: JavaScript (JS ,前端),VBScript, ASP ,JSP ,PHP (后端),SQL(数据库操作语言),Perl, Shell,python,Ruby,JavaFX,Lua等。

为什么要学习和使用shell

Shell属于内置的脚本

程序开发非常高效,依靠强大的命令快速完成开发任务(批处理)

[En]

Program development is very efficient, relying on powerful commands to quickly complete development tasks (batch processing)

语法简单,代码编写简单,易学易学。

[En]

The syntax is simple, and the code is easy to write and easy to learn.

常见的shell 种类?

在linux中有很多类型的shell,不同的shell具备不同的功能,shell还决定了脚本中函数的语法,Linux中默认的shell是 /bin/bash (重点),流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途。

2、shell入门

编写规范

使用流程:

①创建.sh文件 touch/vim

②编写shell代码

③执行shell脚本 脚本必须得有执行权限

二、shell进阶(重点)

1、变量(重点)

1.1 、变量的含义

a. 什么是量:量就是数据.

b. 什么是变量:数据可以发生改变就是变量.

在一个脚本周期内, 其值可以发生改变的量就是变量.

c. 什么叫做一个脚本周期

一个脚本周期我们可以简单的理解为当前的shell文件。

变量是shell中不可或缺的一部分,也是 最基础、最重要的组成部分。

1.2 、变量的定义与使用(重点)

定义形如:class_name=”yunwe “

使用形如:echo $class_name

注意:变量名后面的等号左右不能有空格

变量名的命名须遵循如下规则

命名只能使用字母、数字和下划线,第一个字符不能以数字开头。

[En]

Naming can only use letters, numbers and underscores, and the first character cannot start with a number.

中间没有空格,没有标点符号。

[En]

No spaces in the middle, no punctuation.

不能使用bash里的关键字(可用help命令查看保留关键字)。

关于单双引号的问题:

双引号能够识别变量,双引号能够实现转义(类似于”* “)

单引号是不能识别变量,只会原样输出,单引号是不能转义的

注意: 当在脚本中需要执行一些指令并且将执行的结果赋给变量的时候需要使用”反引号” (esc 键下方的那个键) 。

1.3、只读变量(了解)

语法:readonly 变量名

案例:定义变量a并且其值为10,随后设置其为只读变量,再去尝试重新赋值

1.4 、接收用户输入(重点)

语法:read -p 提示信息 变量名

案例:编写一个脚本test6.sh,要求执行之后提示用户输入文件的名称(路径),然后自动为用户创建该文件

1.5、删除变量(了解)

语法:unset 变量名path

案例:定义变量b=20,再输出b的值,随后删除b,最后再输出下b

2、条件判断语句

语法1(一个条件):

if condition

then

command1

command2

fi

单行写法(一般在命令行中执行的时候):if [ condition ]; then command; fi

语法2(两个条件):

if condition1

then

command1

elif condition2

then

command2

else

commandN

fi

3、运算符

在shell中,运算符和其他编程脚本语言一样,常见的有算数运算符、关系运算符、

逻辑运算符、字符串运算符、文件测试运算符等。

[En]

Logical operator, string operator, * file test operator * , etc.

3.1 、算数运算符

常用的算术运算符:

注意:

条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]

表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2

完整的表达式要被 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

3.2、关系运算符

关系运算符只支持数字,不支持字符串 ,除非字符串的值是数字

下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

shell脚本

-eq:equal

-ne:not equal

-gt:great than

-lt:less than

-ge:great than or equal

-le:less than or equal

3.3、逻辑运算符

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

shell脚本

或运算:一个为真即为真,全部为假才是假

与运算:一个为假即为假,全部为真才是真

3.4、字符串运算符

下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:

shell脚本

3.5、文件测试运算符(重点)

文件测试运算符用于检测 Unix/Linux 文件的各种属性。

属性检测描述如下:

shell脚本

注意:权限几个判断,如果只有一个部分符合,则认为是有权限的。

4、shell脚本附带选项(重点)

问题描述:在linux shell中如何处理tail -10 access.log这样的命令行选项?

步骤:

调用tail指令

系统把后续选项传递给tail

Tail先去打开指定的文件

取出最后10行

问题:自己写的shell是否也可以像内置命令一样传递一些选项呢?

答:是的,送货方式和上面描述的一样,关键是如何接收。

[En]

A: yes, the delivery method is the same as the above description, the key is how to receive it.

例如:

传递:

./test.sh a b c

接收:

在脚本中可以用”$1″来表示a,”$2″来表示b,以此类推。

接收可以用”$ “加上选项对应的序号即可。

Original: https://www.cnblogs.com/komorebiZjh/p/16029956.html
Author: 搁浅的小鲸鱼
Title: shell脚本

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/523984/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 007.iSCSI服务器CHAP双向认证配置

    targetcli shell version 2.1.53 Copyright 2011-2013 by Datera, Inc and others. For help on …

    Linux 2023年6月7日
    0109
  • Shell脚本监控线上端口服务是否正常开启

    前言: 线上服务正常可用是至关重要的,当正在运行的某个端口服务异常停止,我们期望定时脚本可以自动启动,而无需遇到问题再人为的启动。 例如:监听Mysql服务是否正常,我们通常的思路…

    Linux 2023年5月28日
    096
  • Quartus II 13.0 sp1的官方下载页面

    今天为了下个ModelSim跑到网上去找下载资源,清一色的百度网盘,下载速度60k/s,简直有病,于是跑到Intel官网上把连接挖出来了,供各位直接下载 实测使用IDM多线程下载速…

    Linux 2023年6月13日
    0168
  • Redis下载及安装(windows版)

    Redis下载及安装(windows版) 下载地址1、Github下载地址:https://github.com/MicrosoftArchive/redis/releases2、…

    Linux 2023年5月28日
    081
  • Nginx几种负载均衡方式介绍

    Nginx几种负载均衡方式介绍 前言 负载均衡就是Nginx将请求分摊到不同的服务器中,保证服务的可用性,缓解服务压力,保证服务的响应速度,即使某一个应用服务不可用,也可以保证业务…

    Linux 2023年6月6日
    0105
  • 进程相关指令

    pgrep 查找进程名 KILL 删除 执行中的进程和工作 free 打印系统情况和内存情况 free [-bkmgotsh] free -h total used free sh…

    Linux 2023年6月7日
    096
  • redis cli命令

    redis安装后,在src和/usr/local/bin下有几个以redis开头的可执行文件,称为redis shell,这些可执行文件可做很多事情。 可执行文件 作用 redis…

    Linux 2023年5月28日
    069
  • 手套—牛客网

    left[i] 和right[i] 是匹配的数值 0 和 1 左边0个 右边1个 因为数据中有0这种数值 说明有不能匹配的手套。所以这些手套必须加上 避免没有全拿时 拿到了不匹配的…

    Linux 2023年6月13日
    089
  • mac安装homebrew

    1.安装连接 按照下面链接安装https://brew.sh/ 2.百分之99会报错curl: (7) Failed to connect to raw.githubusercon…

    Linux 2023年6月14日
    082
  • Pyinstaller打包教程

    由于用户使用Python脚本的时候可能没有运行环境,所以需要打包。记录下碰到的问题。 安装 pip install –upgrade pyinstaller 安装最新开发版 pi…

    Linux 2023年6月13日
    056
  • 网络设备配置–8、利用ospf配置动态路由

    一、前言 同系列前几篇:网络设备配置–1、配置交换机enable、console、telnet密码网络设备配置–2、通过交换机划分vlan网络设备配置&#8…

    Linux 2023年6月8日
    0101
  • [ Skill ] load 函数优化,识别相对路径

    在 cds.lib 文件中定义库的路径,为了规范管理库的定义,经常这样做: $ tree . |– cds.lib ——————- cat –> …

    Linux 2023年6月7日
    093
  • How to show or hide views within a layout

    Android programming: mode selection and switching using a single activity, Show or hide vi…

    Linux 2023年6月13日
    068
  • 【Example】C++ Vector 内存预分配的良好习惯

    为什么要对 Vector 进行内存预分配? 1,Vector 本身是一个内存只会增长不会减小的容器。 2,Vector 存在 size 和 capacity 两种计数,size 即…

    Linux 2023年6月13日
    092
  • 初识MySQL数据库

    一 、引言 假设现在你已经是某大型互联网公司的高级程序员,让你写一个火车票购票系统,来hold住双十一期间全国的购票需求,你怎么写? 由于在同一时段抢票的人数太多,所以你的程序不可…

    Linux 2023年6月14日
    0119
  • 让SpringBoot也用上Fluent Validator

    前言 在使用SpringBoot的时候经常需要对客户端传入的参数进行合法性的校验,校验的方法基本上都是使用SpringBoot提供的注解,有时候遇上注解不能满足需求的时候还需要在业…

    Linux 2023年6月14日
    084
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球