shell初涉




一.概念:

Shell俗称壳(用来区别于核),是一个命令行解释器,它接收用户命令,然后调用相应的应用程序。




二.shell的种类:

1.     sh(Bourne Shell):由Steve Bourne开发,各种UNIX系统都配有sh

2.     csh(C Shell):由Bill Joy开发,随BSD UNIX发布,它的流程控制语句很像C语言,支持很多Bourne Shell所不支持的功能:作业控制,命令历史,命令行编辑。
3.     ksh(Korn Shell):由David Korn开发,向后兼容sh的功能,并且添加了csh引入的新功能, 是目前很多UNIX系统标准配置的Shell,在这些系统上/bin/sh往往是指向/bin/ksh的符号链 接。
4.     tcsh(TENEX C Shell):是csh的增强版本,引入了命令补全等功能,在FreeBSD、Mac OS X等系统上替代了csh。
5.     bash(Bourne Again Shell):由GNU开发的Shell,主要目标是与POSIX标准保持一致,同 时兼顾对sh的兼容,bash从csh和ksh借鉴了很多功能,是各种Linux发行版标准配置的Shell,在Linux系统上/bin/sh往往是指向/bin/bash的符号链接。虽然如此,bash和sh还是有很多 不同的,一方面,bash扩展了一些命令和参数,另一方面,bash并不完全和sh兼容,有些行 为并不一致,所以bash需要模拟sh的行为:当我们通过sh这个程序名启动bash时,bash可以 假装自己是sh,不认扩展的命令,并且行为与sh保持一致。




三.shell的运行过程:

linux环境下,打开电脑,电脑就会运行bash。当我们进入终端时,bash会在当前目录下创建一个子

shell(为了防止恶意命令使bash出错)。当我们输入命令时,子shell会先检测是否为内置命令,如果是,则直接执行,如果不是内置命令,而是普通命令时,子shell会创建一个子进程,在子进程中exec

这个命令的二进制文件(但如果要执行的不是二进制文件,而是文本文件,并且第一行用Shebang(#! /bin/sh)指定了解释器,则子进程中exec解释器程序的代码,并且从解释器的_start开始执行,而这个文本文件被当作命令行参数传给解释器)。

PS:shell内置命令只是shell进程中的一个函数。Shell的内建命令用man bash-builtins命令查看。




四.shell变量:

(1).概述:,Shell变量由全大写字母加下划线组成,shell变量分为环境变量和本地变量。

环境变量:环境变量可以从父进程传给子进程。可以用printenv命令显示当前shell的环境变量。

本地变量:只存在于当前shell进程。可以用set命令显示当前shell进程中定义的所有变量和函数。

PS:环境变量是所有进程都有的,而本地变量是shell特有的。

导出环境变量用的是export命令。(exprot VARNAME=value)(导出环境变量和定义环境变量可以一步完成)。

用unset命令删除已定义的环境变量或本地变量。



(2).变量引用:

如果一个变量叫做VARNAME,用${VARNAME}可以表示它的值,在不引起歧义的情况下也可用$VARNAME表示它的值。

如    echo ${VALNAME}



(3).文件名替换:

以下用于匹配的字符称为通配符(Wildcard),具体如下:
* : 匹配0个或多个任意字符
? : 匹配一个任意字符
[若干字符] : 匹配方括号中任意一个字符的一次出现

例如:有bash.c    bbsh.c   bcsh.c     bdsh.c文件

则执行    ls      *.c                        会显示所有.c文件

ls      b?sh.c                 会显示上面的所有文件

ls      b[abc]sh.c          会显示bash.c    bbsh.c      bcsh.c文件



(4).

时间: 2024-10-09 21:04:47

shell初涉的相关文章

Shell编程初涉--一些关于Shell的整理

第一部分:Bash变量概述 Shell和其他语言的对比:    1.PHP和Java主要实现功能     2.所见即所得,Shell用于简化管理操作 一.什么是变量与变量分类 1.什么是变量: 变量是计算机内存的单元,其中存放的值可以改变 变量让你能够把程序中准备使用的每一段数据都赋给一个简短易于记忆的名字 2.变量命名规则: 变量名必须以字母或下划线打头,名字中间只能由字母.数字和下划线组成: 变量名的长度不可以超过255个字符: 变量名在有效范围内必须是唯一的: 在Bash中,变量的默认类型

第1章 初涉MySQL

第1章 初涉MySQL 1-1MySQL概述 1-2MySQL的安装与配置 1-3启动与停止MySQL服务 1-4登陆与退出 1-5修改MySQL提示符 1-6修改MySQL常用命令及语法规范 1-7操作数据库 1-1MySQL概述 MySQL数据库 MySQL基础 安装MySQL 配置MySQL 使用MySQL MySQL基础 MySQL由瑞典MySQL AB公司开发,目前属于Oracle. MySQL是一个开源的关系型数据库管理系统. MySQL分为社区版和企业版. 1-2MySQL的安装与

写你的shell,其实很简单

引语:我本人以前并没有写过shell脚本,也许是因为懒,也许是没有被逼到要去写shell的地步.但是,前段时间,工作需求,要求重新跑几个月的脚本,这些脚本是每天定时进行跑的,而且每天是好几个脚本一起关联跑的.你也许会说,这太简单了,写个循环,然后,让他自己去跑就行了.是的,你可以很顺手的用的编程语言去写循环,如PHP,但是,你知道,这样做其实是改变了代码结构了,鬼知道会导致什么结果呢? 并且,我并不保证里面所有代码的意思,我都懂!那么,问题来了,在不改变原代码的前提下,怎样去循环这几个月的时间呢

【Linux系列】【基础版】第四章 Shell基础之正则表达式

4. Shell基础之正则表达式     4.1 正则就是一串有规律的字符串         4.1 grep              4.1.1 格式: grep [-cinrvABC] 'word' filename             4.1.2 -c //count,表示行数             4.1.3 -i //不区分大小写             4.1.4 -n  //显示行号             4.1.5 -r  //遍历所有子目录             4

linux Shell函数

Shell函数类似于Shell脚本,里面存放了一系列的指令,不过Shell的函数存在于内存,而不是硬盘文件,所以速度很快,另外,Shell还能对函数进行预处理,所以函数的启动比脚本更快. 1.函数定义 1 2 3 4 function 函数名() {     语句     [return] } 关键字function表示定义一个函数,可以省略,其后是函数名,有时函数名后可以跟一个括号,符号"{"表示函数执行命令的入口,该符号也可以在函数名那一行,"}"表示函数体的结

Shell实现跳板机,为什么用跳板机

整理自:http://blog.chinaunix.net/uid-22101889-id-3167454.html 注意:请谨慎使用,到现在为止,使用了,我还没找到改回去的方法. 1.     问题 第一.很多大公司的服务器都不允许直接登录,而是通过一个跳板机才能登录过去.在跳板机中,通常只能执行几个少数命令(如SSH),而其他命令是不允许执行的,那么怎样才能实现这个功能呢? 第二.一些小公司,由于服务器比较少,不需要什么跳板机之类的说法,公司的开发运维人员加起来也就那么十几二十人,通常大家都

linux shell基础语法

1.第一个Shell脚本 打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了. 输入一些代码: #!/bin/bash echo "Hello World !" "#!" 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell.echo命令用于向窗口输出文本. 运行Shell脚本有两种方法. 1.1作为可执行程序 将上面的代码保存为t

shell中test命令方法详解

test命令用法.功能:检查文件和比较值 1)判断表达式 if test  (表达式为真) if test !表达式为假 test 表达式1 –a 表达式2                  两个表达式都为真 test 表达式1 –o 表达式2                 两个表达式有一个为真 2)判断字符串 test –n 字符串                                   字符串的长度非零 test –z 字符串                          

shell脚本

-e filename 如果 filename存在,则为真 [ -e /var/log/syslog ]-d filename 如果 filename为目录,则为真 [ -d /tmp/mydir ]-r filename 如果 filename可读,则为真 [ -r /var/log/syslog ]-w filename 如果 filename可写,则为真 [ -w /var/mytmp.txt ]-x filename 如果 filename可执行,则为真 [ -L /usr/bin/gr