学习shell

1、什么是shell?

答:替我们工作的是硬件,而控制硬件的是核心,用户是利用shell控制核心提供的工具来操控硬件正确的工作。也就是说shell充当了人类和核心间沟通者得角色!

                                                               图1 硬件、核心和shell的关系

2、BASH SHELL      

目前几乎所有的linux都使用bash作为管理核心的主要shell!BASH的优点有如下几个:

1、命令记忆功能--只要在命令行中按上下键就可以找到输入的前一个指令!你曾经输入过的指令记录在根目录的 ./bash_history下。但需要注意的是./bash_history 记录的是你上一次登陆以前执行过的指令,至于这一次登陆执行的命令都被暂存在内存里!

2、补全功能,主要分为命令补全和文件名称补全。   输入命令的一部分后按下Tab健补全命令或者文件名,按两下会出现所有可能结果。。。很好用哦!!

3、命令别名设定功能- 例如将用la 取代ls -al  急事   alias la='ls -al' 

4、.作业控制,前景背景控制

关于shell scripts的内容将在以后的博文中提到

3、环境变量

1、什么是环境变量?

在正确登陆linux系统后才能以shell跟linux沟通,这时候有一个bash执行程序,真正经由bash跟系统沟通。在进入shell之前,由于系统需要一些变量来提供数据的存取(或者是一些环境的设定参数值,例如是否显示色彩)所以就需要一些所谓的环境变量来读入系统。这些环境变量包括PATH,HOME.MAIL.SHELL等,都非常重要!!为了与自定义变量的区别,环境变量通常以大写字符表示。

下表罗列了一些Linux系统使用的变量并说明了它们的用处。在表格后面将列举一些变量例值。

变量 说明
PATH 这个变量包含了一系列由冒号分隔开的目录,系统就从这些目录里寻找可执行文件。如果你输入的可执行文件(例如lsrc-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环境变量,确定执行文件的名称  。

2、关于环境变量命令介绍:

1.echo 显示某个环境变量值 echo $PATH  注意:为了要分辨是不是变量,linux系统预设变量名称前会加一个$符号

2.export 设置一个新的环境变量 export HELLO="hello" (可以无引号)
3.env 显示所有环境变量
4.set 显示本地定义的shell变量
5.unset 清除环境变量 unset HELLO
6.readonly 设置只读环境变量 readonly HELLO

3、linux中的变量命名规则

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!

你可能感兴趣的:(linux,shell,bash,linux,login,path,command)