linux从入门到精通--探索linux奥秘(十六)--shell
ahcoder 2025-01-10 11:22 7 浏览
# 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 6.15将更新媒体子系统:高通Iris驱动首次亮相
-
IT之家3月24日消息,科技媒体phoronix昨日(3月23日)发布博文,报道称Linux6.15内核将于本周启动合并窗口,首批提交的PullRequest请求之一,就...
- Ubuntu 25.04发行版登场:Linux 6.14内核,带来多项技术革新
-
IT之家4月18日消息,科技媒体linuxiac昨日(4月17日)发布博文,报道称代号为PluckyPuffin的Ubuntu25.04发行版正式上线,搭载最新Linu...
- WordPress 6.8 版本发布:聚焦性能升级,代号“Cecil”
-
WordPress6.8版本发布:聚焦性能升级,代号“Cecil”全球最受欢迎的内容管理系统(CMS)WordPress正式推出最新版本6.8,代号“塞西尔”(Cecil),以此致敬传奇钢琴家...
- Linus Torvalds接受微软Hyper-V升级 下一代Linux启动会更快
-
虽然Windows的粉丝和Linux的粉丝经常喜欢进行激烈的键盘大战,但操作系统的制造商们自己也了解彼此的优缺点。毫无疑问,微软也明白这一点,事实上,它甚至鼓励用户尝试Linux,尽管是使用...
- Debian 12发布:Linux内核升级6.1(debian更新内核)
-
IT之家6月11日消息,Debian是最古老的GNU/Linux发行版之一,也是许多其他基于Linux的操作系统的基础,包括Ubuntu、Kali、MX和树莓派OS等。这...
- Linux Mint预告新功能:升级Nemo搜索、LMDE 7支持OEM安装
-
IT之家4月10日消息,LinuxMint发布了最新月度简讯,宣布增强Nemo文件管理器的文件搜索功能、Cinnamon桌面环境开始支持Wayland、LMDE7(LinuxM...
- Linux 6.2合并大量网络系统更新:推进Wi-Fi 7和800 Gbps网络
-
IT之家12月15日消息,Linux6.2合并窗口期内已经确认将会合并大量网络子系统更新。和以往版本相同,Linux6.2内核更新周期在网络功能上有大量的改进,更多的细节可以访问这条...
- Linux内核升级实践指南(linux内核怎么升级)
-
Linux内核升级是一个需要谨慎操作的过程,但掌握正确方法后可以显著提升系统性能、安全性或硬件兼容性。以下是一份详细的实践指南,涵盖主流方法及注意事项:一、准备工作查看当前内核版本bashuname...
- Linux又将迎来大版本更新 5.20版可能会被称为Linux 6.0
-
如果你错过了昨天Linux5.19的发布公告,那么这一消息需要回顾一下:被称为Linux5.20的开发中的内核很可能会被称为Linux6.0。根据LinusTorvalds对现代版本的划分,L...
- 周六的娱乐就是安装一台OracleLinux虚拟机(一)
-
每个人有每个人的娱乐方式。老父亲可能喜欢摆弄一些机械工具修修补补。我趁着周六安装一套OracleLinux,寓学于乐。在oracle网站上,下载VirtualBox,现在最新版本是7.0.8。在安装过...
- Linux系统下Gaussian 16的安装(linux系统如何安装新软件)
-
Gaussian是目前使用最多的量子化学计算软件,当前最新的版本为Gaussian16C.01。理论上来说Gaussian并不需要安装,因为高斯一般是不出售源代码的,只有二进制文件,以Gaussi...
- 「Linux基础」VMWare虚拟机安装CentOS后配置静态ip
-
在VMWare中安装本地虚拟机CentOS7操作系统,动态IP地址会经常变化,不便于管理与实验。为了便于实验,考虑设置成静态IP地址,目标是本地局域网可以通过NAT网关互相访问,且能连接互联网。由于是...
- Win10虚拟机,Hyper-V安装CentOS,一次成功
-
打开控制面板,选择程序选择启用或关闭Windows功能选中Hyper-V下所有的组件。提示我们需要,重启计算机,保存我们的文件,之后点击“立即重新启动”选择开始菜单,输入Hy,就可以打开虚拟机管理器了...
- 如何在Windows 10中的Hyper-V虚拟机上安装CentOS Linux
-
注意双重引导的一种可行且相当不错的替代方法是在虚拟机上安装各种操作系统。Microsoft正式支持CentOS作为Hyper-V的来宾OS,并且在安装时可以很好地集成。自CentOS6.4版以来,用...
- 安装Linux虚拟机的5个理由,以及不安装的5个原因
-
虚拟机(VM)允许你在不永久更改计算机的情况下探索Linux。如果你对Linux很好奇,但犹豫是否要尝试,VM提供了一个安全、灵活的解决方案。如果这是你第一次听说虚拟机,虚拟机就像“计算机中的计算机”...
- 一周热门
- 最近发表
-
- Linux 6.15将更新媒体子系统:高通Iris驱动首次亮相
- Ubuntu 25.04发行版登场:Linux 6.14内核,带来多项技术革新
- WordPress 6.8 版本发布:聚焦性能升级,代号“Cecil”
- Linus Torvalds接受微软Hyper-V升级 下一代Linux启动会更快
- Debian 12发布:Linux内核升级6.1(debian更新内核)
- Linux Mint预告新功能:升级Nemo搜索、LMDE 7支持OEM安装
- Linux 6.2合并大量网络系统更新:推进Wi-Fi 7和800 Gbps网络
- Linux内核升级实践指南(linux内核怎么升级)
- Linux又将迎来大版本更新 5.20版可能会被称为Linux 6.0
- 周六的娱乐就是安装一台OracleLinux虚拟机(一)
- 标签列表
-
- linux 远程 (37)
- u盘 linux (32)
- linux 登录 (34)
- linux 路径 (33)
- linux 文件命令 (35)
- linux 是什么 (35)
- linux 界面 (34)
- 查看文件 linux (35)
- linux 语言 (33)
- linux代码 (32)
- linux 查看命令 (33)
- 关闭linux (34)
- root linux (33)
- 删除文件 linux (35)
- linux 主机 (34)
- linux与 (33)
- linux 函数 (35)
- linux .ssh (35)
- cpu linux (35)
- 查看linux 系统 (32)
- linux 防火墙 (33)
- linux 手机 (32)
- linux 镜像 (34)
- linux mac (32)
- linux ip地址 (34)