shell 入门

今天肉肉想和大家分享一下我学习shell时做的一些整理和总结,文章内容是根据肉肉自己的学习习惯展开,涉及到的示例全部是肉肉亲自实践,针对自己的实际应用,做了一些总结,如有不太贴切或错误的地方,还希望各位提出并指正,期待和大家一起成长并进步。首先我们从认识shell开始。

目录

1. 基本概念认识

2. shell具备什么能力

3. shell不擅长的事

4. 常见的shell

5. 新建一个shell

6. 执行shell脚本


1. 基本概念认识

shell是一个用C语言编写的程序,使用户使用Linux的连接桥梁,shell可以理解为一种命令语言,也可以看作是一种程序设计语言。

Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,可以说Shell脚本就是一系列命令的集合,因为它本身是不需要编译的,而是通过解释器解释之后再编译执行。

Shell可以直接使用在win/Unix/Linux上面,并且可以调用大量系统内部的功能来解释执行程序,如果熟练掌握Shell脚本,可以让我们操作计算机变得更加轻松,也会节省很多时间。

2. shell具备什么能力

  • 文件管理
  • 程序执行
  • 文字/文本处理
  • 网络配置
  • 服务启停

3. shell不擅长的事

  • 精密运算,shell不适合做计算
  • 高效的语言处理,shell可以快速开发一个脚本简化开发流程,但是不能替代高级语言

4. 常见的shell

Shell 是一种脚本语言,那么,就必须有解释器来执行这些脚本,我们常说有多少种 Shell,其实说的是 Shell 脚本解释器

  • sh

sh 的全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。

sh 是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 Shell。

  • csh

sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计的,这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。Bill Joy 是一个风云人物,他创立了 BSD 操作系统,开发了 vi 编辑器,还是 Sun 公司的创始人之一。BSD 是 UNIX 的一个重要分支,后人在此基础上发展出了很多现代的操作系统,最著名的有 FreeBSD、OpenBSD 和 NetBSD,就连 Mac OS X 在很大程度上也基于BSD。

  • tcsh

tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。

  • ash

一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。

  • bash

bash shell 是 Linux 的默认 shell,是各种 Linux 发行版默认配置的 shell。

Linux为什么会选bash作为默认的解释器呢?是因为它具有如下的特点:

  • 1)可以使用类似 DOS 下面的 doskey 的功能,用方向键查阅和快速输入并修改命令。

  • 2)自动通过查找匹配的方式给出以某字符串开头的命令。

  • 3)包含了自身的帮助功能,你只要在提示符下面键入 help 就可以得到相关的帮助。

bash是由 GNU 组织开发,保持了对 sh shell 的兼容性,bash 兼容 sh 意味着,针对 sh 编写的 Shell 代码可以不加修改地在 bash 中运行。尽管如此,bash 和 sh 还是有一些不同之处:

1)bash 扩展了一些命令和参数;

2)bash 并不完全和 sh 兼容,它们有些行为并不一致,但是在大多数运维情况下区别不大,特殊场景可以使用 bash 代替 sh。

5. 新建一个shell

使用文本编辑器新建一个文件:test.sh。

扩展名.sh代表shell,扩展名不影响脚本执行,如果用php写shell脚本,就可以.php做扩展名,做到见名知意就好了。

脚本内容如下:

#!/bin/bash
echo "hello world!" #这是一条语句
echo "what's your name?"
read PERSON
echo "hello, I'm $PERSON."

代码内容解释:

第一行:#! 该标识是一个约定的标志,用来告诉系统这个脚本使用哪一种shell执行,后面的/bin/bash指明了解释器的具体位置;

第二/三行:echo 该命令用于向标准输出文件(即终端)输出文本,在.sh 文件中,使用命令与在终端直接输入是一样的效果,# 此符号后表示注释内容,shell中注释内容均已#开头,#!除外;

第四行:read 该命令表示从终端读取数据并赋值给PERSON变量;

第五行:表示读取终端客户输入数据后输出,注意使用PERSON变量时,必须加上符号$。

6. 执行shell脚本

执行shell脚本一般有两种方式:

1)作为可执行程序

shell脚本可以作为一种可执行程序,在终端直接调用(需要使用chmod命令给脚本文件增加执行权限),执行方法如下:


guochunli:Crystals-Mac > ~ $ cd /Users/guochunli/learning\ materials/shell\ 学习/
guochunli:Crystals-Mac > shell 学习 $ chmod +x test.sh
guochunli:Crystals-Mac > shell 学习 $ ./test.sh 
hello world!
what's your name?
Crystal
hello, I'm Crystal.
guochunli:Crystals-Mac > shell 学习 $ 

执行过程解释:

  • 1 使用cd切换到test.sh所在目录;

  • 2 使用chmod +x 给test.sh脚本增加执行权限;

  • 3 ./test.sh 用于执行脚本,./(注意这里有一个点号) 表示当前目录,整句命令表示执行当前目录下的test.sh文件

上面这种方式需要给执行文件增加执行权限,用起来不那么痛快是吧,其实它还有如下两种方式来执行:

a. 使用点号( . )

点号用于执行某个脚本,脚本没有执行权限也可以执行。

新建文件test2.sh,脚本内容如下:

#!/bin/bash
echo "宇宙超级无敌聪明的美少女Crystal正在奋力整理文章。。。"

如果没有执行权限的话,使用./test2.sh执行就会报错:

guochunli:Crystals-Mac > shell 学习 $ ./test2.sh
-bash: ./test2.sh: Permission denied

但是使用点号.就可以执行该脚本,注意点号与文件之间要有一个空格,不然会提示找不到该文件:

guochunli:Crystals-Mac > shell 学习 $ . ./test2.sh
宇宙超级无敌聪明的美少女Crystal正在奋力整理文章。。。

b. 使用source命令

与点号类似,source命令也称为“点命令”,是bash的内部命令,可以读取并在当前环境中执行脚本。

source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录(比如常用的,在Mac系统中修改环境变量后就可以使用source命令使刚刚的改动生效)。

用法:source filename 或 . filename

guochunli:Crystals-Mac > shell 学习 $ source test2.sh
宇宙超级无敌聪明的美少女Crystal正在奋力整理文章。。。

2)作为解释器参数

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

guochunli:Crystals-Mac > shell 学习 $ /bin/bash test2.sh
宇宙超级无敌聪明的美少女Crystal正在奋力整理文章。。。

通过这种方式运行脚本,不需要在文件第一行制定解释器信息,即使指定了也没有用。


引申内容:source filename 与 sh filename 及./filename执行脚本的区别在那里呢?

1. 当shell脚本具有可执行权限时,用sh filename与./filename执行脚本是没有区别得。./filename是因为当前目录没有在PATH中,"."是用来表示当前目录的。

2. sh filename 表示重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。

3. source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。所以脚本里面所有新建、改变变量的语句都会保存在当前shell里面。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值