您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > 07 - 第七章 Shell初步,管理命令
第七章Shell初步,管理命令先问大家一个问题,那就是前面讨论了很多的命令,谁在帮我们处理呢?用ls命令做个比方,用户输入ls,操作系统怎么知道用户输入的命令是ls?操作系统怎么知道从哪里去把找ls这个命令,并且把将这个命令的二进制文件调到内存中执行的?其实有个程序在操作系统中默默的负责和用户交互的工作,它就是shell。Windows的图形Shell一般是Exporer,字符界面的shell就是的cmd。Linux有图形的shell,GNOME,或者KDE等,也有字符界面的,种类很多有sh,bash,csh,tcsh,kshell等等。Bash应该算是Linux的标准Shell,本章就讨论一些关于Bash的内容。1.变量1.1普通变量什么是变量?学过C语言的同学都知道说变量其实就是一块内存地址,里面存放了一些内容,其实bash里面也有变量这个概念。记得前面学过的which命令么?which在环境变量PATH规定的路径里面查找相应的命令。PATH就是一个变量,可以使用echo命令查看PATH变量的内容:root@leo-laptop:/tmp#echo$PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/gamesecho命令后面会说到,这里需要注意的是在bash中引用变量时,需要在变量的名字之前面增加一个$。从上面的输出可以看到PATH是一堆路径的集合,用冒号分隔,这个变量很有用,执行一个命令,没有给出这个命令的绝对路径,bash就会到上面的路径里面去查找,找到的第一个结果就掉入内存执行了。声明一个需要遵守下面这些规则:变量和变量内容之间用=连接等号两边不能有空格变量名必须用字母开头,是字母和数字的组合变量的值如果中间有空格,$等特殊字符可以用单引号括起来可以使用转义字符\将特殊符号比如回车,\等转义成一般字符反引号可以用来就地求值如果要给变量增加内容的时候可以使用$变量名或者${变量名}来增加内容环境变量名一般全大写看看下面的例子:root@leo-laptop:/tmp#test=123变量testroot@leo-laptop:/tmp#echo$test123root@leo-laptop:/tmp#test1='1234'变量值含有空格root@leo-laptop:/tmp#echo$test11234root@leo-laptop:/tmp#test2=123\456变量值含有空格root@leo-laptop:/tmp#echo$test2123456root@leo-laptop:/tmp#${test2}=${test2}:appended追加内容123:commandnotfoundroot@leo-laptop:/tmp#test2=${test2}:appendedroot@leo-laptop:/tmp#echo$test2123456:appendedroot@leo-laptop:/tmp#echo${test2}显示变量123456:appendedroot@leo-laptop:/tmp#testdir=`pwd`就地取值root@leo-laptop:/tmp#echo$testdir/tmpBash中有三种变量,普通变量,bash变量,环境变量。普通变量:方便用户使用,没有什么特殊的用途,上面列子中的变量就是普通变量bash变量:会对终端的bash环境形成一定的影响环境变量:影响当前环境中运行的程序1.2Bash变量Bash变量会影响到用户当前使用的环境,常见的bash变量列举如下:PS1:命令行前面的提示字符root@leo-laptop:/tmp#^^^^^^^^^^^^^^^^^^^^^这一段就是提示字符root@leo-laptop:/tmp#echo$PS1显示PS1的值\[\e]0;\u@\h:\w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$leo@leo-laptop:~$PS1=\[\e]0;\u@\h:\w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\W\t\$leo@leo-laptop:~23:33:08$提示符立刻变化了leo@leo-laptop:~23:33:08$PS1=\[\e]0;\u@\h:\w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$和上面同一行leo@leo-laptop:~$改回来PS1中常用的转义字符如下\d:显示出‘星期月日’的日期格式\H:完整的主机名称\h:仅取主机名在第一个小数点之前的名字\t:显示时间,为24小时格式的‘HH:MM:SS’\T:显示时间,为12小时格式的‘HH:MM:SS’\A:显示时间,为24小时格式的‘HH:MM’\@:显示时间,为12小时格式的‘am/pm’样式\u:当前用户名称\v:bash版本号\w:完整的工作目录的名称\W:利用basename函数取得工作目录名称,所以仅会列出最后一个目录名。\#:下达的第几个指令。\$:提示字符,如果是root时,提示字符为#,否则就是$PS2:二级命令提示符,命令执行过程中要求输入数据时用PS3:select的命令提示符PS4:调试命令提示符IFS:输入域分隔符。当读取输入时,用来分隔单词的字符,通常是空格、制表符和换行符。$:当前shell的PID?:上个命令的返回值。这个变量用来指明上次执行的命令的返回值,如果上次命令执行成功,则返回0,执行不成功返回非0。root@leo-laptop:/tmp#ls/none-exist-dirls:cannotaccess/etesadsfa:Nosuchfileordirectoryroot@leo-laptop:/tmp#echo$?上个命令出错,返回非02root@leo-laptop:/tmp#ls/bincdrometcinitrd.imglibmediaoptrootselinuxsysusrvmlinuzbootdevhomeinitrd.img.oldlost+foundmntprocsbinsrvtmpvarvmlinuz.oldroot@leo-laptop:/tmp#echo$?上个命令执行成功,返回001.3环境变量环境变量会影响整个操作系统,在Shell中设置环境变量会影响这个shell的所有的子进程,常见的环境变量有如下这些:PATH:操作系统查找可执行命令的目录LANG:用来指示系统语言HOME:指示当前用户home目录的位置SHELL:当前使用Shell的可执行文件位置LOGNAME:当前登录用户名PWD:当前目录USER:当前用户2.Bash内置命令前面讲过一个type命令,当对cd命令使用type命令的时候会得到如下结果:可以看到cd是一个shell内置的命令,Bash有很多内置的命令,这一节就介绍一些Shell常用的内部命令。2.1echo这个命令其实是主要用来在终端上显示一个字符串,但是也用来显示环境变量:root@leo-laptop:/tmp#echo$PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/gamesroot@leo-laptop:/tmp#echo$?0root@leo-laptop:/tmp#echo$$1339root@leo-laptop:/tmp#echo$NONE当然也可以使用一些转义符号比如\t,\n等,不过这时候需要增加-e选项。Echo还有一些其他的用法,查看bash的手册可以找到echo相关的内容。2.2setset这个命令是bash内置的命令,可以使用这个命令查看当前bash进程中的bash变量。这个命令可以用来修改一些bash运行时的参数,需要使用的时候可以看下手册。root@leo-laptop:/tmp#setBASH=/bin/bashBASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:progcomp:promptvars:sourcepathBASH_ALIASES=()BASH_ARGC=()BASH_ARGV=()BASH_CMDS=()BASH_LINENO=()BASH_SOURCE=()BASH_VERSINFO=([0]=4[1]=1[2]=5[3]=1[4]=release[5]=i486-pc-linux-gnu)BASH_VERSION='4.1.5(1)-release'COLUMNS=165DIRSTACK=()EUID=0GROUPS=()leo@leo-laptop:~$typecdcdisashellbuiltinHISTCONTROL=ignoredups:ignorespaceHISTFILE=/root/.bash_historyHISTFILESIZE=2000…2.3unsetbash的内置命令,用来取消一个变量。leo@leo-laptop:~$test=123leo@leo-laptop:~$echo$test123leo@leo-laptop:~$unsettestleo@leo-laptop:~$echo$testleo@leo-laptop:~$2.4declareDeclare用来声明一个变量,声明变量的时候可以带如下参数:-a:该变量是一个数组-i:该变量是一个整数-x:该变量是一个环境变量-r:该变量是只读的leo@leo-laptop:~$declare-isum=(3*2)+7leo@leo-laptop:~$echo$sum13leo@leo-laptop:~$declare-xenv_test=1234声明环境变量,和export一样leo@leo-laptop:~$env|grepenv_testenv_test=1234leo@leo-laptop:~$declare-rreadonly_var=123声明只读变量,不可修改leo@leo-laptop:~$readonly_var=1234-bash:readonly_var:readonlyvariableleo@leo-laptop:~$declare-anarray=(onetwothree)声明数组leo@leo-laptop:~$echo${narray[*]}显示数组所有元素onetwothreeleo@leo-laptop:~$echo${narray[@]}显示数组所有元素onetwothreeleo@leo-laptop:~$echo${#narray[*]}显示数组长度3leo@leo-laptop:~$echo${#narray[@]}显示数组长度3leo@leo-laptop:~$echo${narray[0]}显示第一个元素oneleo@leo-laptop:~$echo${narray[1]}显示第二个元素twoleo@leo-laptop:~$echo${narray[2]}显示第三个元素three注意引用数组的时候数组名需要用一对花括号括起来,另外还有两个特殊的变量@和*,可以用来显示数组的所有元素,如果要取数组长度可以使用${#arrayname[@]}。2.5export这个命令有两个作用,一个用来显示所有的环境变量,另外将一个变量设置成为环境变量,bash内置命令。root@leo-laptop:/tmp#TEST=1234root@leo-la
本文标题:07 - 第七章 Shell初步,管理命令
链接地址:https://www.777doc.com/doc-5056100 .html