Shell(一)
什么是Shell
Shell是指种命令行解释器,是为用户和操作系统之间通信提供的一种接口,它接受来自用户输入的命令,并将其转换为一系列的系统调用送到内核执行,并将结果输出给用户。
Shell还是一种解释性语言,执行一条语句就翻译一条,并且每次执行程序都需要进行解释。相比较编译型语言只翻译一次,效率较低。
Shell版本
- sh(Bourne Shell):各种UNIX系统都配有sh。
- csh(C Shell):支持很多Bourne Shell所不支持的功能:作业控制,命令历史,命令行编辑。
- ksh(Korn Shell):向后兼容sh的功能,并且添加了csh引入的新功能。
- bash(Bourne Again Shell):是各种Linux发行版标准配置的Shell,在Linux系统上/bin/sh往往是指向/bin/bash的符号链接。如下图:
本文接下来的操作都是用bash,大家可通过echo $SHELL
来查看自己系统的Shell是否为bash
第一个Shell脚本
首先touch helloworld.sh
,写入以下内容
首行以#!开头,后面跟着要执行此脚本的解释器。在shell中#为注释部分,我们echo输出Hello World!
尝试执行它,发现程序权限报错,原因是我们写的文件默认不带有执行权限,需要添加可执行权限才可以运行,如下:
我们可以正确看到打印出的结果了。
变量
变量:就是值可以改变的量,变量名是指向一片用于存储数据的内存空间。大致可分为环境变量,自定义变量。Shell变量是一种弱类型的变量,也就是说在声明变量时不需要指定变量的类型。
用户自定义变量:又可以理解为局部变量,只存在于当前Shell进程的用户自己定义的变量。
环境变量:环境变量可以从父进程传给子进程,Shell进程的环境变量可以从当前Shell进程传给fork出来的子进程。
当然系统还可能存在一些用户不能定义的变量,在此就不做介绍了。
接下来,我们定义一个局部变量:
直接使用变量名=值(=两边不要带空格),这样的格式就可以,查看局部变量使用echo $变量名。但是当我们使用env查看时确查找不到刚定义的变量,原因是env查找的是环境变量可以理解为全局的,而刚才定义的是局部的。那怎么把刚定义的变量转换成环境变量呢?
使用export 变量名
:
这样我们就可以通过env查找刚才定义的环境变量了。
使用unset 变量名
就可以删除自定义/环境变量了
成功删除变量,其他内容后续更新。