百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

linux从入门到精通--探索linux奥秘(十六)--shell

sinye56 2024-12-24 15:31 14 浏览 0 评论

# linux从入门到精通-从基础学起,逐步提升,探索linux奥秘(十六)--shell

## 一、Shell基础-关于shell:什么是shell

### 1、什么是shell?

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

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

### 2、什么是脚本?

脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开查看、编辑)。

### 3、常见的脚本:

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

### 4、为什么要学习和使用shell?

Shell属于内置的脚本

程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理)

语法简单,代码写起来比较轻松,简单易学

### 5、常见的shell种类?

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

### 6、csh

C shell 使用的是“类C”语法,csh是具有C语言风格的一种shell,其内部命令有52个,较为庞大。目前使用的并不多,已经被/bin/tcsh所取代。

### 7、ksh

Korn shell 的语法与 Bourne shell 相同,同时具备了 C shell 的易用特点。许多安装脚本都使用 ksh ,ksh有42条内部命令,与bash相比有一定的限制性。

### 8、tcsh

tcsh是csh的增强版,与 C shell 完全兼容。

### 9、sh

是一个快捷方式,已经被/bin/bash所取代。

### 10、nologin

指用户不能登录

1)查看那些用户不能登录系统:vim /etc/passwd

按 /nologin 搜索


2)修改用户 zhangsan 权限,使其不能登录系统。

### 11、zsh

目前Linux里最庞大的一种shell:zsh。它有84个内部命令,使用起来也比较复杂。一般情况下,不会使用该shell。

### 12、bash

大多数Linux系统默认使用的shell,bash shell 是 Bourne shell 的一个免费版本,它是最早的 Unix shell,bash还有一个特点,可以通过help命令来查看帮助。包含的功能几乎可以涵盖shell所具有的功能,所以一般的shell脚本都会指定它为执行路径。

## 二、shell入门(1)

### 1、shell编写规范:shell代码规范,shell文件命名规范, shell 使用流程。

### 2、shell代码规范:

#!/bin/bash [指定告知系统当前这个脚本要使用的shell解释器]

Shell相关指令

### 3、shell文件命名规范:

文件名.sh .sh是linux下bash shell 的默认后缀

### 4、shell使用流程:

1)创建.sh文件 touch/vim

2)编写shell代码

3)执行shell脚本 脚本必须得有执行权限

### 5、案例1:创建test.sh,实现第一个shell脚本程序,输出hello world.

1)输出命令:#echo 123

2)注意:输出的内容如果包含字母和符号(不包含变量),则需要用引号包括起来。如果是纯数字可以包也可以不包。

touch test.sh

vim test.sh

#!/bin/bash

echo 'hello world'

3)新创建的 test.sh 没有执行权限,要赋予执行权限才能执行。

ll test.sh

chmod +x test.sh

ll test.sh

./test.sh

4)注意,这里在运行时一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,Linux 系统会去 PATH(环境变量) 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

## 三、shell入门(2)

### 6、案例2:使用root用户帐号创建并执行test2.sh,实现创建一个shelltest用户,并在其家目录中新建文件try.html。

1)创建并编辑 test2.sh 文件

touch test2.sh

vim test2.sh

#!/bin/bash

useradd shelltest

touch /home/shelltest/try.html

2)赋予 test2.sh 文件执行权限

chmod +x test2.sh

3)脚本执行的另外一个方式:/bin/bash 脚本的路径(了解)

/bin/bash test2.sh

ls /home/shelltest/

4)Shell脚本分为简单的写法(简单命令的堆积)和复杂写法(程序的设计)

## 四、shell进阶(重点):变量(1)

### 1、变量的含义

1) 什么是量

量就是数据.

2)什么是变量

数据可以发生改变就是变量.

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

3)什么叫做一个脚本周期

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

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

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

1)变量,先定义后使用。

2)定义形如:class_name="yunwe "

3)使用形如:echo $class_name

4)变量就是由2部分组成,一个是变量名(左边),另外一部分是变量的值(右边)

### 3、变量名和变量值是什么关系??

变量名和变量值是使用和被使用关系; 我们的变量名来使用变量值;

在使用变量的时候一定需要在变量名前面添加一个$符号,该要求在其他语言中也存在的(例如php)。

### 4、变量名的规范

1)注意,变量名后面的等号左右不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。

- 中间不能有空格,可以使用下划线“_”。

- 不能使用标点符号。

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

2)问题:以下哪个shell变量名是合法的? A

A. var B.?var C. user*name D.echo

### 5、案例1:使用变量改写入门脚本中的第1个shell脚本。

1)创建并编辑 test3.sh 脚本文件

touch test3.sh

vim test3.sh

#!/bin/bash

str='hello world!'

echo $str

2)给 test3.sh 脚本文件赋予执行权限,并执行脚本文件 test3.sh 输出结果

chmod + test3.sh

./test3.sh

### 6、关于单双引号的问题:

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

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

### 7、案例2:定义一个变量,输出当前时间,要求格式为“年-月-日 时:分:秒”。

1)创建并编辑 test4.sh 脚本文件

touch test4.sh

vim test4.sh

#!/bin/bash

dt=`date +'%F %T'`

echo $dt

2)给 test4.sh 脚本文件赋予执行权限,并执行脚本文件 test4.sh 输出结果

chmod + test4.sh

./test4.sh

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

## 五、shell进阶(重点):变量(2)

### 8、只读变量(了解)

1)语法:readonly 变量名

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

3)创建并编辑 test5.sh 脚本文件

touch test5.sh

vim test5.sh

#!/bin/bash

a=10

readonly a

a=20

echo $a

4)给 test5.sh 脚本文件赋予执行权限,并执行脚本文件 test5.sh 输出结果

chmod + test5.sh

./test5.sh

### 9、接收用户输入(重点)

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

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

3)创建并编辑 test6.sh 脚本文件

touch test6.sh

vim test6.sh

#!/bin/bash

read -p '请输入需要创建的文件路径:' filepath

touch $filepath

echo '文件创建成功'

ls -l $filepath

4)给 test6.sh 脚本文件赋予执行权限,并执行脚本文件 test6.sh 输出结果

chmod + test6.sh

./test6.sh

### 10、删除变量(了解)

1)语法:unset 变量名

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

3)创建并编辑 test7.sh 脚本文件

touch test7.sh

vim test7.sh

#!/bin/bash

b=20

echo "b=" $b

unset b

echo "b=" $b

4)给 test7.sh 脚本文件赋予执行权限,并执行脚本文件 test6.sh 输出结果

chmod + test7.sh

./test7.sh

## 六、shell进阶(重点):条件判断语句

### 1、条件判断语句

老婆给当程序员的老公打电话:下班顺路买一斤包子带回来,如果看到卖西瓜的,买一个。当晚,程序员老公手捧一个包子进了家门…老婆怒道:你怎么就买了一个包子?!老公答曰:因为看到了卖西瓜的。

把程序员老婆的话当作一段需求分析一下吧。买一斤包子是一个确定无疑的需求项,无论后面是什么情况什么条件,前面这一斤包子是肯定要买的。看到卖西瓜的是一个条件判断,后面“买一个”是一个模糊不清的需求项,买一个什么呢?需求里没说啊。客户把这个当作开发人员默认了解的内容了。可是作为一个成熟合格的程序员,该老婆的丈夫应该马上跟进确认需求“买一个什么?”,要不然程序可怎么写呢?所以笑话里该程序员是不合格的,起码是不积极不负责的。在没有明确需求的情况下,他只能按照自己的理解来完成工作了。那比较可能的结果就有如下几种:

1) 看到卖西瓜的,买一个西瓜

如果 看到卖西瓜的

那么

买一个西瓜

否则

买一斤包子

2) 看到卖西瓜的,买一个包子

如果 看到卖西瓜的

那么

买一个包子

3) 看到卖西瓜的,买一个卖西瓜的

4) 看到卖西瓜的,买一个老婆一直想买的东西

5) 看到卖西瓜的,随便买一个东西

上述1)和2)下面的条件汉字描述称之为“伪代码”,也是属于条件表达式的语法。

### 2、条件判断语句语法1(一个条件):

```bash

if condition

then

command1

command2

...

fi

```

单行写法(一般在命令行中执行的时候):

```bash

if [ condition ]; then command; fi

```

### 3、条件判断语句语法2(两个条件):

```bash

if condition

then

command1

command2

...

else

command

fi

```

### 4、条件判断语句语法3(多个条件):

```bash

if condition1

then

command1

elif condition2

then

command2

else

commandN

fi

```

**`上一节关联链接请点击:`**

linux从入门到精通-探索linux奥秘(十五)--云服务器和域名

相关推荐

CTO偷偷传我的系统性能优化十大绝招(万字干货)

上篇引言:取与舍软件设计开发某种意义上是“取”与“舍”的艺术。关于性能方面,就像建筑设计成抗震9度需要额外的成本一样,高性能软件系统也意味着更高的实现成本,有时候与其他质量属性甚至会冲突,比如安全性、...

提升效率!VMware虚拟机性能优化十大实用技巧

我40岁,干跨境婚恋中介的。为服务各国用户,常得弄英语、日语、俄语系统环境,VMware虚拟机帮了不少忙。用久了发现优化下性能,效率能更高。今儿就来聊聊优化技巧和同类软件。一、VMware虚拟...

低延迟场景下的性能优化实践

本文摘录自「全球C++及系统软件技术大会」ScottMeyers曾说到过,如果你不在乎性能,为什么要在C++这里,而不去隔壁的Pythonroom呢?今天我们就从“低延迟的概述”、“低延迟系...

Linux性能调优之内存负载调优的一些笔记

写在前面整理一些Linux内存调优的笔记,分享给小伙伴博文没有涉及的Demo,理论方法偏多,可以用作内存调优入门博文内容涉及:Linux内存管理的基本理论寻找内存泄露的进程内存交换空间调优不同方式的...

优化性能套路:带你战胜这只后段程序员的拦路虎

来源|极客时间《卖桃者说》作者|池建强编辑|成敏你好,这里是卖桃者说。今天给大家推荐一篇文章,来自倪朋飞老师的专栏《Linux性能优化实战》,文章主要讲的是优化性能的套路,这几乎是每个后端程序员...

SK海力士CXL优化解决方案已成功搭载于Linux:带宽提升30%,性能提升12%以上

SK海力士宣布,已将用于优化CXL(ComputeExpressLink)存储器运行的自研软件异构存储器软件开发套件(HMSDK)中主要功能成功搭载于全球最大的开源操作系统Linux上,不但提升了...

Linux内核优化:提升系统性能的秘诀

Linux内核优化:提升系统性能的艺术在深入Linux内核优化的世界之前,让我们先来理解一下内核优化的重要性。Linux内核是操作系统的核心,负责管理系统资源和控制硬件。一个经过精心优化的内核可以显著...

Linux系统性能优化:七个实战经验

Linux系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。Linux系统管理员可能经常会遇到系统不稳定、响应速度慢等问题,例如在Linux上搭建了一个web服务,经常出现网页无法打开、打开速...

腾讯面试:linux内存性能优化总结

【1】内存映射Linux内核给每个进程都提供了一个独立且连续的虚拟地址空间,以便进程可以方便地访问虚拟内存;虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同字长的处理器,地址空间的范围也不同...

Linux文件系统性能调优《参数优化详解》

由于各种的I/O负载情形各异,Linux系统中文件系统的缺省配置一般来说都比较中庸,强调普遍适用性。然而在特定应用下,这种配置往往在I/O性能方面不能达到最优。因此,如果应用对I/O性能要求较高,除...

Nginx 性能优化(吐血总结)

一、性能优化考虑点当我需要进行性能优化时,说明我们服务器无法满足日益增长的业务。性能优化是一个比较大的课题,需要从以下几个方面进行探讨当前系统结构瓶颈了解业务模式性能与安全1、当前系统结构瓶颈首先需要...

Linux问题分析与性能优化

排查顺序整体情况:top/htop/atop命令查看进程/线程、CPU、内存使用情况,CPU使用情况;dstat2查看CPU、磁盘IO、网络IO、换页、中断、切换,系统I/O状态;vmstat2查...

大神级产品:手机装 Linux 运行 Docker 如此简单

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:灵昱Termux作为一个强大的Android终端模拟器,能够运行多种Linux环境。然而,直接在Termux上运行Docker并不可行,需要...

新手必须掌握的Linux命令

Shell就是终端程序的统称,它充当了人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端程序,它就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的许多主流Linux系统默认使用的终端是...

Linux 系统常用的 30 个系统环境变量全解析

在Linux系统中,环境变量起着至关重要的作用,它们犹如隐藏在系统背后的“魔法指令”,掌控着诸多程序的运行路径、配置信息等关键要素。尤其在shell脚本编写时,巧妙运用环境变量,能让脚本如虎...

取消回复欢迎 发表评论: