您的位置:首页 > 运维架构 > Shell

ubuntu下shell脚本基础与入门

2014-10-11 11:14 453 查看
shell脚本学习推荐书籍:

《LINUX与UNIX Shell编程指南》 

< < Advanced Bash-Scripting Guide > > ,即ABS

《Learning the bash shell》

一、今天阅读项目的sh脚本,特地看了下sh脚本的执行方法,发现还是挺多的,在网络上搜索到一些相关资料,罗列如下。

1. source命令或者点(.)命令用法:

  source FileName

  作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"

    注:该命令通常用命令“.”来替代。

这里的FileName不需要用 #!

    如:source .bash_profile

        . .bash_profile两者等效。

    source(或点)命令通常用于重新执行刚修改的初始化文档。

    source命令(从 C Shell 而来)是bash shell的内置命令。

    点命令,就是个点符号,(从Bourne Shell而来)。

    source的程序主体是bash,脚本中的$0变量的值是bash,而且由于作用于当前bash环境,脚本中set的变量将直接起效

2 sh, bash的命令用法:

     sh/bash FileName

     作用:打开一个子shell来读取并执行FileName中命令。该filename文件可以无"执行权限"

     注:运行一个shell脚本时会启动另一个命令解释器.

         每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.

            这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.

         shell脚本也可以启动他自已的子进程.

            这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务.

    在ubuntu中sh只是bash的一个链接。

    由于是在子shell中执行,脚本设置的变量不会影响当前shell。

3、./的命令用法:

     ./FileName

     作用:打开一个子shell来读取并执行FileName中命令。该filename文件需要"执行权限"

     注:运行一个shell脚本时会启动另一个命令解释器.

         每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.

            这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.

         shell脚本也可以启动他自已的子进程.

            这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务.

    由于是在子shell中执行,脚本设置的变量不会影响当前shell。

二、第一个最常见的修改环境变量的命令:

export 功能说明:设置或显示环境变量。

语  法:export [-fnp][变量名称]=[变量设置值]

补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅限于该次登陆操作。

参  数:

 -f  代表[变量名称]中为函数名称。

 -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。

 -p  列出所有的shell赋予程序的环境变量。

扩展:

set:显示(设置)shell变量 包括的私有变量以及用户变量,不同类的shell有不同的私有变量 bash,ksh,csh每中shell私有变量都不一样

env:显示(设置)用户变量变量

export:显示(设置)当前导出成用户变量的shell变量。

使用unset命令来清除环境变量,注意set env  export设置的变量,都可以用unset来清除的

使用readonly命令设置只读变量

最根本的设置、更改变量的配置文件 ~/.bash_profile   ~/.bashrc   ~/.bash_logout

~/.bash_profile  用户登录时被读取,其中包含的命令被执行

~/.bashrc  启动新的shell时被读取,并执行

~/.bash_logout  shell 登录退出时被读取

三、Bash shell的初始化过程

shell(这里指bash)的初始化过程是这样的:

1.bash 检查文件/etc/profile 是否存在
2. 如果存在,bash 就读取该文件,否则,跳过
3.bash 检查主目录下的文件.bash_profile 是否存在。
4. 如果存在,bash 就读取該文件,否则,跳过
5.bash 检查主目录下的.bash_login 是否存在。
6. 如果存在,bash 就读取该文件,否则,跳过
7.bash 检查主目录下的文件.profile 是否存在
8. 如果存在, bash 就读取该文件,否则,跳过。
这些步骤都执行完后,就出现提示符了, ksh 默认提示符是 $.

四、shell命令里常见的参数与运算符:

-e filename  filename存在,则真
-d filename  filename目录则真 
-f filename  filename常规文件,则真
-L filename  filename符号链接则真
-r filename  filename可读则真 
-w filename  filename可写则真 
-x filename  filename可执行则真
-s filename 文件长度0则真
-h filename 文件软链接则真
filename1 -nt filename2  filename1比 filename2新则真
filename1 -ot filename2  filename1比 filename2旧则真
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
至于!号取非呗


五、常见的shell变量

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保护起来。

 

PATH:决定了shell将到哪些目录中寻找命令或程序

HOME:当前用户主目录

MAIL:是指当前用户的邮件存放目录。

SHELL:是指当前用户用的是哪种Shell。

HISTSIZE:是指保存历史命令记录的条数

LOGNAME:是指当前用户的登录名。 

HOSTNAME:是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。

LANG/LANGUGE:是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。 

PS1:是基本提示符,对于root用户是#,对于普通用户是$。

PS2:是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,比如下列命令会将提示符修改成字符串“Hello,My NewPrompt :) ”。 

# PS1=" Hello,My NewPrompt :) "
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: