答:替我们工作的是硬件,而控制硬件的是核心,用户是利用shell控制核心提供的工具来操控硬件正确的工作。也就是说shell充当了人类和核心间沟通者得角色!
目前几乎所有的linux都使用bash作为管理核心的主要shell!BASH的优点有如下几个:
1、命令记忆功能--只要在命令行中按上下键就可以找到输入的前一个指令!你曾经输入过的指令记录在根目录的 ./bash_history下。但需要注意的是./bash_history 记录的是你上一次登陆以前执行过的指令,至于这一次登陆执行的命令都被暂存在内存里!
2、补全功能,主要分为命令补全和文件名称补全。 输入命令的一部分后按下Tab健补全命令或者文件名,按两下会出现所有可能结果。。。很好用哦!!
3、命令别名设定功能- 例如将用la 取代ls -al 急事 alias la='ls -al'
4、.作业控制,前景背景控制
关于shell scripts的内容将在以后的博文中提到
在正确登陆linux系统后才能以shell跟linux沟通,这时候有一个bash执行程序,真正经由bash跟系统沟通。在进入shell之前,由于系统需要一些变量来提供数据的存取(或者是一些环境的设定参数值,例如是否显示色彩)所以就需要一些所谓的环境变量来读入系统。这些环境变量包括PATH,HOME.MAIL.SHELL等,都非常重要!!为了与自定义变量的区别,环境变量通常以大写字符表示。
下表罗列了一些Linux系统使用的变量并说明了它们的用处。在表格后面将列举一些变量例值。
变量 | 说明 |
PATH | 这个变量包含了一系列由冒号分隔开的目录,系统就从这些目录里寻找可执行文件。如果你输入的可执行文件(例如ls、rc-update或者emerge)不在这些目录中,系统就无法执行它(除非你输入这个命令的完整路径,如/bin/ls)。 |
ROOTPATH | 这个变量的功能和PATH相同,但它只罗列出超级用户(root)键入命令时所需检查的目录。 |
LDPATH | 这个变量包含了一系列用冒号隔开的目录,动态链接器将在这些目录里查找库文件。 |
MANPATH | 这个变量包含了一系列用冒号隔开的目录,命令man会在这些目录里搜索man页面。 |
INFODIR | 这个变量包含了一系列用冒号隔开的目录,命令info将在这些目录里搜索info页面。 |
PAGER | 这个变量包含了浏览文件内容的程序的路径(例如less或者more)。 |
EDITOR | 这个变量包含了修改文件内容的程序(文件编辑器)的路径(比如nano或者vi)。 |
KDEDIRS | 这个变量包含了一系列用冒号隔开的目录,里面放的是KDE相关的资料。 |
CONFIG_PROTECT | 这个变量包含了一系列用空格隔开的目录,它们在更新的时候会被Portage保护起来。 |
CONFIG_PROTECT_MASK | 这个变量包含了一系列用空格隔开的目录,它们在更新的时候不会被Portage保护起来。 |
HISTSIZE是指保存历史命令记录的条数。
LOGNAME是指当前用户的登录名。
HOSTNAME是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。
SHELL是指当前用户用的是哪种Shell。
LANG/LANGUGE是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
MAIL是指当前用户的邮件存放目录。
PS1是基本提示符,对于root用户是#,对于普通用户是$。PS2是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符。
getenv()访问一个环境变量。输入参数是需要访问的变量名字,返回值是一个字符串。如果所访问的环境变量不存在,则会返回NULL。
setenv()在程序里面设置某个环境变量的函数。
unsetenv()清除某个特定的环境变量的函数。
1)etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.
注:在这里我们设定是为所有用户可使用的全局变量。
2)/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
3)~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
注:~在LINUX下面是代表HOME这个变量的。
另外在不同的LINUX操作系统下,这个文件可能是不同的,可能是~/.bash_profile; ~/.bash_login或 ~/.profile其中的一种或几种,如果存在几种的话,那么执行的顺序便是:~/.bash_profile、 ~/.bash_login、 ~/.profile。
4)~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取.
(注:这个文件是 .开头的,所以在文件夹中被隐藏了)
5)~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是/"父子/"关系
~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同,所以通常前者会调用后者。
好的,总结一下他们的执行方式:
当你登录并且登录shell是bash时,bash首先执行/etc/profile文件中的命令(如果该文件存在),然后它顺序寻找~ /.bash_profile,~/.bash_login或~/.profile文件,并执行找到的第一个可读文件中的命令.当登录bash退出时,它 将执行~/.bash_logout文件中的命令.
当启动一个交互的bash时,它将执行~/.bashrc文件中的命令(如果该文件存在并且可读).当非交互地启动以运行一个shell脚本时,bash将查找bash_env环境变量,确定执行文件的名称 。
1.echo 显示某个环境变量值 echo $PATH 注意:为了要分辨是不是变量,linux系统预设变量名称前会加一个$符号!
2.export 设置一个新的环境变量 export HELLO="hello" (可以无引号)
3.env 显示所有环境变量
4.set 显示本地定义的shell变量
5.unset 清除环境变量 unset HELLO
6.readonly 设置只读环境变量 readonly HELLO
1) 变量和变量内容以等号‘=’连接。
2) 等号左右不能有空格。
3)变量名称只能是字母与数字,且不能以数字开头。
4)若变量值存在空格,则必需以双引号或单引号包裹起来.注意:双引号内的特殊字符可以保留变量特性,单引号内的特殊字符则仅为一般字符。
[root@lpp ~]# name=lpp
[root@lpp ~]# echo $name
lpp
[root@lpp ~]# myname="$name it's me"
[root@lpp ~]# echo $myname
lpp it's me
[root@lpp ~]# myname='$name it's me'
$name is me
5)"\"既可以作为跳转字符,也可以作为转义字符。
[root@lpp ~]# var=\$HOME
[root@lpp ~]# echo $var
$HOME
6) 若变量要括增内容,应该使用双引号及$引用该变量。
[root@lpp ~]# var=$HOME
[root@lpp ~]# echo $var
/root
[root@lpp ~]# var="$var "lpp
[root@lpp ~]# echo $var
/root lpp
7) 若该变量需要在该程序的子程序中运行,需要使用export.
[root@lpp ~]# name="lpp's pc"
[root@lpp ~]# echo $name
lpp's pc
[root@lpp ~]# /bin/bash --另开一个bash的子程序
[root@lpp ~]# echo $name
[root@lpp ~]# exit
exit
[root@lpp ~]# export name
[root@lpp ~]# /bin/bash
[root@lpp ~]# echo $name
lpp's pc
8)在一串指令中如果需要借助其他指令,可以使用`command`来嵌套(注意这里不是单引号,而是quote符号,也就是你的键盘上F1下面的那个按钮)
[root@lpp profile.d]# uname -r
2.6.18-194.el5
[root@lpp profile.d]# var="My kerne is "`uname -r`
[root@lpp profile.d]# echo $var
My kerne is 2.6.18-194.el5
9) 取消变量使用unset
明天继续努力!!加油!FIGHTING!