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

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奥秘(十五)--云服务器和域名

相关推荐
摸鱼也很难41 分钟前
Docker 镜像加速和配置的分享 && 云服务器搭建beef-xss
运维·docker·容器
watermelonoops43 分钟前
Deepin和Windows传文件(Xftp,WinSCP)
linux·ssh·deepin·winscp·xftp
woshilys1 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
疯狂飙车的蜗牛2 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
恩爸编程3 小时前
探索 Nginx:Web 世界的幕后英雄
运维·nginx·nginx反向代理·nginx是什么·nginx静态资源服务器·nginx服务器·nginx解决哪些问题
Michaelwubo4 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器
远游客07134 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<4 小时前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟4 小时前
centos-stream9系统安装docker
linux·docker·centos
好像是个likun4 小时前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器