1认识shell及shell脚本shell——命令解释器,其主要功能是负责解释和执行命令行上键入的内容。shell也提供了完善的编程能力。流行的shell有多种,如Bash、Tcsh、Ksh等。1认识shell及shell脚本shell作用示意图1认识shell及shell脚本Shell类型/bin/sh(最早的shell程序,已经被/bin/bash所取代);/bin/bash(通常情况下Linux系统默认的shell);/bin/ksh(贝尔实验室开发,兼容于bash);/bin/zsh(基于ksh开发,功能更加强大);/bin/csh(语法和C语言相似,更多的考虑了用户界面的友好性);/bin/tcsh(csh的增强版,取代csh,提供更多的功能);1认识shell及shell脚本Bash的重要功能命令和文件补全命令历史记录功能命令别名设置功能通配符功能作业控制、前后台控制1认识shell及shell脚本shellscript就像是早期批处理文件,最简单的功能就是将多条指令汇整写在一起,只需执行一次就可以轻松处理复杂的动作[root@serverroot]#vie1.sh内容如下:#!/bin/bashlsecho“Hello,world!”说明:shell脚本是按行解释的,每个脚本的第一行总是以#!/bin/bash开头在shell脚本中,以“#”开头的行表示注释shell将忽略对该行的处理,即不进行解释、显示和执行认识shell及shell脚本有两种执行shell脚本程序的方法。直接执行1给脚本e1.sh增加执行权[root@serverroot]#chmoda+xe1.sh2键入./el.sh直接执行脚本[root@serverroot]#./e1.she1.shHello,world!键入sh脚本名[root@serverroot]#she1.shHello,world!环境变量环境变量在用户登录时,Linux系统会自动设置一些变量,这些变量的值决定了用户的工作环境和外观,因此称为环境变量。可用“env”(environment)列出所有的环境变量及内容环境变量常用环境变量HOSTNAME:代表主机名称;SHELL:当前环境下使用的shell程序,如果是bash的话,默认是/bin/bash;HISTSIZE:记录曾经执行过的历史命令条数;USER:用户的名称;ENV:用户所用的个性化环境设置文件的读取文件;HOME:代表用户的家目录,很多程序都可能会用到这个变量的值;MAIL:当使用mail命令收信时,系统会去读取的邮件信箱文件;PATH:执行文件搜索的路径。目录之间以冒号(:)分割,顺序很重要,决定查询顺序;PWD:当前工作目录;SHLVL环境变量:SHELL的层数。显示环境变量#echo$变量名环境变量可写的shell环境变量可以对它们进行赋值,大部分可写的shell变量都在登录过程执行/etc/profile文件时初始化用户也可以修改自己的启动文件用户目录/.bash_profile来定制自己的运行环境环境变量一般是大写的,系统启动后自动加载,可写的环境变量用户也可以随时进行修改#[root@localhost~]#echo$PS1[\u@\h\W]\$[root@localhost~]#PS1=[\u@@@\h]***[root@@@localhost]***环境变量设置环境变量用户定义的普通变量通过导出也可以成为环境变量。环境变量就可以被其他的程序或下级子shell所访问。设置的命令是export,其格式如下:export变量名[root@server~]#exportMYVAR=‘hello'[root@server~]#echo$MYVARhello本地用户变量本地变量一般地,shell变量不需要先定义,就可以直接为其赋值,即在赋值的同时完成变量的定义。为变量赋值的格式如下:变量名=变量值[root@serverroot]#a=1注意:在等号的左右两边不能出现空格。本地用户变量当赋值的内容包含空格时,要使用“”将内容括起来,否则只将空格前面的内容赋值给该变量[jacky@bogon~]$tom=”jacky’sfather”[jacky@bogon~]$echo$tomjacky’sfather本地用户变量双引号中出现其它变量名时,在显示内容时会将该变量的内容显示出来,而单引号则只是原封不动的显示字符,即一些特殊字符失去意义。例如[jacky@bogon~]$name=jacky[jacky@bogon~]$test1=’$nameseven’[jacky@bogon~]$echo$test1$nameseven[jacky@bogon~]$test2=”$nameseven”[jacky@bogon~]$echo$test2jackyseven本地用户变量反引号括起来的字符串被shell解释为命令行[jacky@bogon~]$mydate=”mytimeis:`date`”[jacky@bogon~]$echo$mydatemytimeis:2012年3月15日星期四13:20:23CST可使用declare指令来声明变量并设置变量的属性[root@localhost桌面]#declarea=10[root@localhost桌面]#echo$a本地用户变量使用变量值在变量名前加上前缀“$”符号,${variable}echo${mydate}大括号在不引起歧义的情况下也可以省略,以下例子表示使用变量时的不同情况[jacky@bogon~]$name=jacky[jacky@bogon~]$echo${name}seven注:带有大括号相当于拼合字符串jackyseven[jacky@bogon~]$echo$nameseven注:$name和seven间无空格,表空串[jacky@bogon~]$echo$nameseven注:$name和seven间有空格jackyseven本地用户变量清除变量使用“unset”命令将其清除[jacky@bogon~]$tom=”jacky’sfather”[jacky@bogon~]$echo$tomjacky’sfather[jacky@bogon~]$unsettom[jacky@bogon~]$echo$tom特殊变量特殊变量:位置变量和特定变量参数如果要向一个shell脚本传递信息,可以使用位置参数来完成。$0表示命令或shell脚本,无论脚本是否有参数,此值均可用。$1-$9表示位置参数。如果参数个数多于9个,则多出的参数将会被忽略。[jacky@bogon~]$autobak.sh/etc/home/jacky/usr/boot/opt/lib$0$1$2$3$4$5$6autobak.sh/etc/home/jacky/usr/boot/opt/lib特殊变量-位置参数请看以下位置参数示例:[root@servermyshell]#vie2.sh内容如下:#!/bin/bashecho$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11[root@servermyshell]#./e2.shabcdefghijka,b,c,d,e,f,g,h,i,a0,a1特殊变量-位置参数通过shift命令可以实现位置参数的左移,其格式如下:shift[前移量]位置参数移位示例:[root@servermyshell]#cate3.sh#!/bin/shshiftecho$1shift2echo$1[root@servermyshell]#./e3.shabcdbd特殊变量$#传递到shell脚本的参数个数,对上例值为6$*以一个单字符串显示所有向脚本传递的参数。上例代表”/etc/home/jacky/usr/boot/opt/lib”$$脚本运行的当前进程ID号$!后台运行的最后一个进程的进程ID号$@使用时每个参数加引号,上例代表”/etc”“/home/jacky”“/usr”“/boot”“/opt”“/lib”$-显示shell使用的当前选项,与set命令功能相同$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。特定变量参数表示的相关控制信息。打印特殊变量[root@servermyshell]#vispecialvar.sh#!/bin/bashecho'$#is:'$#echo'$*is:'$*echo'$?is:'$?echo'$$is:'$$echo'$0is:'$0元字符元字符:具有特殊的含义与作用,无法像普通字符那样使用它们,如果想把它们用作普通字符(比如说在echo语句中)就需要用一个反斜杠对它们进行转换,当然也可以使用单引号“’”将元字符或者含有元字符的变量字符串括起来,同样可以达到相同的目的。元字符作用例子$取变量值$SHELL或者${SHELL}!取历史指令!3执行历史指令中的第三个指令*N个字符占位符rm*删除所有文件?1个字符占位符rma?删除a开头两个字符文件名的文件&保证指令在后台执行find/-name1.txt&()在子shell中执行一组指令(ls-l;pwd)1.txt\禁用元字符,就是转义符\#[]含义有多种:占位,条件测试[a-z]a-z的所有字符[4=2]~用户主目录|管道符号ls|wc{}占位符号,一组字符ls{dir1,dir2}变量操作read命令:用来从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。一般形式:readvarible1varible2...[jacky@bogon~]$readtestthisisatest[jacky@bogon~]$echo$testthisisatest[jacky@bogon~]$readtest1test2#输入内容第一个空格之后的内容全部赋予最后一个变量thisisatest[jacky@bogon~]$echo$test2isatest变量操作参数功能示例-p允许在read命令行中直接指定一个提示read-pEnteryourname:name-t指定read命令等待输入的秒数。当计时满时,read命令返回一个非零退出状态read-t5-ppleaseenteryourname:name-n后接数字,指示read命令只要接受到该数字个字符就退出。read-n1-pDoyouwanttocontinue[Y/N]?answer-s能够使输入的数据不显示在监视器上(实际上只是将文本颜色设置成与背景色相同,通常用来输入密码)read-s-pEnteryourpassword:pass变量操作expr:该命令一般用于整数值,也可用于字符串。格式:exprargumentoperatorargument[jacky@bogon~]$expr3+5#运算符两侧无空格原样输出3+5[jacky@bogon~]$expr3+5#任何一侧无空格均会被认为是语法错误8[jacky@bogon~]$var=8[jacky@bogon~]$expr$var–5#可以使用变量参与运算3[jacky@bogon~]$expr$var\*8#使用“\”在“*”前避免认为其是通配符64学习ShellScriptshell脚本实质上就是一个文本文件,内容是多条命令和变量通过控制语句结合在一起来完成特定的功能,因此编辑shell脚本可以通过vim来实现。如使用脚本实现环境变量PATH的设置,在屏幕上显示“Ourfirstshellscript\n”提示字符串#vie4.sh#!/bin/bash#firstshellprogramPATH=/bin:/sbin:/usr/sbin:/sur/local/bin:/usr/local/sbin:.exportPATHecho–e“Ourfir