设为首页 加入收藏

TOP

Shell基础快速入门 了解shell运行原理(一)
2019-09-01 23:00:32 】 浏览:35
Tags:Shell 基础 快速 入门 了解 shell 运行 原理

Shell简介

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

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

Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。

Shell运行原理

Linux严格意义上是一个操作系统,我们称为核心,但我们一般的用户是不能直接使用核心的,而是通过外壳程序。也就是shell,对比Windows,图形界面就是外壳程序。shell的简单定义就是命令行解释器,功能是将使用者的命令翻译给核心处理,同时将核心处理的结果翻译给使用者。可以看出shell主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

shell在解释命令的时候并不是自己亲自执行,而是派生子进程让子进程去完成这项工作,这样的好处是把风险交给别人,当指令的执行出现问题时不会影响到shell(影响到其他指令的执行)。shell不可以挂,shell 一旦挂就没有什么可以解释命令了。对我们而言shell为了保证自己风险最低,通过创建子进程进行命令行的解释工作。而shell自己只要去等就可以了。

Shell 脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。 业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。

Shell脚本解释器

Linux的Shell脚本解释器种类众多,一个系统可以存在多个shell脚本解释器,可以通过cat /etc/shells 命令查看系统中安装的shell脚本解释器。

/bin/sh

/bin/bash

/bin/rbash

bash由于易用和免费,在日常工作中被广泛使用。同时,Bash也是大多数Linux系统默认的Shell脚本解释器。

shell脚本头,#!/bin/sh与#!/bin/bash的区别.

GNU/Linux操作系统中的/bin/sh本是bash (Bourne-Again Shell)的符号链接,但鉴于bash过于复杂,有人把bash从NetBSD移植到Linux并更名为dash Debian Almquist Shell),并建议将/bin/sh指向它(软链),以获得更快的脚本执行速度。Dash Shell 比Bash Shell小的多,符合POSIX标准。

sh一般设成bash的软链
在一般的linux系统当中(如redhat),使用sh调用执行脚本相当于打开了bash的POSIX标准模式
也就是说 /bin/sh 相当于 /bin/bash --posix
sh跟bash的区别,实际上就是bash有没有开启posix模式的区别

第一个shell脚本

新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好。

运行 Shell 脚本有两种方法:

1、作为可执行程序

cd 到相应目录:

chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本

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

2、作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

/bin/sh test.sh

Shell变量

语法规则:变量名=变量值 my_name="Gavin Pan"

注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名规则与其他语言差不多,不能使用bash里的关键字(可用help命令查看保留关键字)。

1.变量类型

局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程 序需要环境变量来保证其正常运行。可以用过set命令查看当前环境变量。

shell变量:由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell 的正常运行。

2.定义变量

my_name="Gavin Pan"

3.引用变量

echo $my_name
echo ${my_name}
#引用一个定义过的变量,只要在变量名前面加$即可,变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。

4.重新定义变量

my_name = "Gavin"

my_name="Gavin Pan"

5.只读变量

使用readonly 命令将变量变成只读变量

my_name = "Gavin"
readonly my_name
my_name="Gavin Pan"

6.删除变量

my_name="Gavin"
unset my_name
echo $my_name

使用unset命令可以删除变量,变量被删除后不能再次使用,同时unset命令不能删除只读变量。

Shell字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。

str1='hello Gavin'
str2="hello Gavin"
str3="hello \"$my_name\"
echo str1 #hello Gavin
echo str2 #hello Gavin
echo str3 #hello "Gavin Pan"

双引号的优点:可以有变量,可以转义字符。

字符串相关操作

#拼接字符串
a="a"
b="b"
c=$a$b 或者 c="$a $b"
获取字符串长度
str="abcdefg"
echo ${#str} #output 7
提取字符串
echo ${str:1:3} #output bcd
以上例子表示从字符串的第二个数字往后截取3个字符
查找字符串
echo `expr index "$str" cb` #output 2
注意: 以上脚本中 ` 是反引号,而不是单引号 ',不要看错了哦。
查找字符 c 或 b 的位置(哪个字母先出现就计算哪个)

shell 数组

在 Shell 中,用括号来表示数组,数组元素用"空格"符号

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇智能家居-2.基于esp8266的语音控.. 下一篇net namespace实验

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目