shell 是用户与Linux内核进行联系的桥梁,Linux通过shell界面接受用户需求,提供相应的服务。
下面是百度百科中关于shell的解释:
基本上shell分两大类:
一:图形界面shell(Graphical User Interface shell 即 GUI shell)
例如:应用最为广泛的 Windows Explorer (微软的windows系列制作系统),还有也包括广为人知的 Linux shell,其中linux shell 包括 X window manger (BlackBox和FluxBox),以及功能更强大的CDE、GNOME、KDE、 XFCE。
二:命令行式shell(Command Line Interface shell ,即CLI shell)
Shell基本上是一个命令解释器,类似于DOS下的command.com。它接收用户命令(如ls等),然后调用相应的应用程序。较为通用的shell有标准的Bourne shell (sh)和C shell (csh)。
交互式shell和非交互式shell
交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。
shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
Linux中交互式shell: Gnome登录成功以后就会调用交互式shell,它利用/etc/profile和/etc/bashrc以及~/.profile文件来进行环境变量的初始化。
非交互式shell主要是用用于脚本,当利用命令行界面提交一个shell脚本,从开始执行到结束整个环境处于非交互式shell。
shell 既是一个命令解释程序,又是一个强有力的编程语言,因为它可以接受用户命令,同时本身具有判断,循环等语法结构。
运行脚本
1:只需对文件拥有可读权限
$ sh scripts/test.sh 如果用sh的话,必须在脚本中指定具体是哪个bash.因为sh是dash的符号链接文件,若不指定会冲突
2:chmod是文件具有x属性,然后直接调用
$ scripts/test.sh $ test.sh(如果test.sh在当前目录)
对于python脚本如果时当前目录的话必须为形式 $ ./test 才能够通过。Python入门
结束脚本
exit n , n=0表示正常退出 n != 0是非正常. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
如果脚本中exit没有n的话,返回状态就是这个exit前面的那个命令的值。它实际上等价于变量$?
$? 给出之前执行的最后一个命令的出口状态。所以对于函数而言的话,也就是返回返回值了。同时我们可以再终端直接输入$?用于显示出口状态
调用适当的shell解释程序
shell脚本都是以#!,这时一个标示符,用于说明当前文本中接下来有命令,需要到指定的shell中进行解析。而#!就是用于指定这个shell。所以说你在脚本中的命令都是指定shell中所认识的内部函数之类的。如果你有多行#!开头的特殊指示符行,只有第一行起作用。
#!bin/bash 系统默认的bash shell
#!bin/rm 用的是rmfile这个特殊shell,这个特殊的shell只会删除当前脚本,而没有其他作用
#!bin/more 这个特殊的shell,将会显示脚本中除特殊指示符行以外的所有信息
位置参数
命令行传递给shell脚本的参数,传递给函数的参数和set命令得到的参数通常被称为位置参数。位置参数依次为$0 $1 $2...注意这是分3中情况。而对函数的话,这就给出了我们赋予它实参的一个方式
传递给shell脚本的参数:$0是脚本名,它由shell进行处理。
变量: $*和$@表示所有的位置参数,$#表示位置参数的总数。
快速传递最后一个参数的方式:
args=$#
lastarg=${!args}
更改位置参数
shift命令把位置参数都向前移一位 $2->$1 $n->$n-1,原来的$1,$n都不存在了。而$0不变,仍旧是脚本名。每执行一次$*和$@都会舍弃一个,$#同时减1。
$*与$@的区别
变量的分类
内部变量(为shell编程提供支持),环境变量(为了内核及系统命令提供环境PATH HOME),本地变量,参数变量及用户自定义变量。
广义的讲每个进程都运行在特定的"环境"里面,它将影响进程的行为。每当开始的时候,shell都会更新环境变量,更新自己的运行环境,如果在shell中定义了环境变量,我们需要通过export命令予以公布,以让子程序能够调用。
变量的赋值
$ variable="hello me"
$ read
$ for args in list