linux shell命令提示符号PS1设置

第一、bash 有两级用户提示符。 
第一级:是你经常看到的 bash 在等待命令输入时的提示符。缺省的一级提示符是字符$美元符号>(如果是超级用户,则是#井或散列>号)。 
你可以通过改变bash 的PS1变量的值来改变你的缺省提示符, 
例如:  
PS1="Please enter a command"  
把bash shell 的提示符该为指定的字符串。如果退出刚刚设定的变量读取系统默认的变量的话,暂时没有什么好办法,crtl+d 退出再次登陆读取系统默认变量。 

第二级:当bash 期待输入更多的信息以完成命令时显示第二级提示符。缺省的第二级提示符是 >。 如果你要改变第二级提示符,可以通过设置PS2变量的值来实现:  
PS2="I need more information" 

第二、特殊字符定义你的变量提示符 
另外你还可以用特殊的字符来定义你的提示符,下面的列表列出了最常 用的特殊字符。  
提示符特殊字符代码字符含义: 
\! 显示该命令的历史记录编号。  
\# 显示当前命令的命令编号。  
\$ 显示$符作为提示符,如果用户是root的话,则显示#号。  
\\ 显示反斜杠。  
\d 显示当前日期。  
\h 显示主机名。  
\n 打印新行。  
\nnn 显示nnn的八进制值。  
\s 显示当前运行的shell的名字。  
\t 显示当前时间。  
\u 显示当前用户的用户名。  
\W 显示当前工作目录的名字。  
\w 显示当前工作目录的路径。  
第三、特殊符号的组合 
这些特殊字符能组合成很多种有用的提示符方案(也可以组合为很奇异 
的方案),例如把 PS1 设为:  
PS1="\t"  
这导致提示符显示当前的时间,就象下面的显示一样(提示符后面将不 
会有空格):  
02:16:15  
而下面的设置:  
PS1=\t  
将导致提示符变成下面的样子:  
t  
这显示了设置中引号的重要性,下面的提示符串:  
PS1="\t\\ _ "  
会使提示符看起来象这个样子:  
02:16:30\ _ 
这种情况下,提示符后面会有一个空格(灰色处),因为引号里有一个空格。 该例就是使用两个特殊字符的组合得到的。 
第四、控制shell的运行方式 
Bash有一些特殊变量,能控制shell以不同的方式工作。 

例如: 
变量noclobber能防止在重定向输出时意外地覆盖一个文件。 
通过set命令可以设置noclobber变量的有效或无效。set命令有两个参数:一个是指定变量开(on)或关(off)的选项,一个是特殊变量的变量名。要使某一特殊变量开(有效),用-o选项,要使其关(无效),用+o选项。 
例如: 
$ set –o noclobber    // 使noclobber变量开 
$ set +o noclobber    // 使noclobber变量关 
三个最常用的shell特殊变量有:ignoreeof、noclobber及noglob。 
  ignoreeof 
  ignoreeof变量用来禁止使用ctrl+d来退出shell(ctrl+d不仅用来退出shell,而且可以终止用户直接输往标准输出上的输入。该操作经常在一些shell实用命令中使用,例如实用命令cat。在这些实用程序操作中,非常容易误操作而意外地退出shell。ignoreeof特殊变量正是用来防止这种意外的退出。例如: 
$ set –o ignoreeof 
设置之后,用户只能用logout或exit命令退出shell。 
  noclobber 
  noclobber变量可以在重定向输出时保护已存在的文件,防止被意外地覆盖。在下例中,用户设置noclobber为有效,在重定向时,用户试图去覆盖已经存在的文件myfile,此时系统将返回一个错误信息。 
   [例] 
   $ set –o noclobber 
   $ cat preface>myfile 
   bash: myfile: cannot overwrite existing file 
   $ 
  noglob 

  设置noglob变量后,shell将不扩展文件名中一些特殊的字符或字符串。如字符*、?、[]等将不再作为通配符。如果用户希望列出结尾为?的文件名answer?,可通过如下步骤:首先,用户使noglob变量为无效,然后再列出文件名。可以看到,目前命令行上的问号?被认为是文件名中的一个字符,而不再被看作通配符。 
$ set –o noglob 
$ ls answer? 
answer? 
第五、子shell与export命令 
  用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。 
  在子shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。 export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。 
  [例]在本例中,变量myfile是在dispfile脚本程序中定义的。然后用export命令将变量myfile输出至任何子shell,例如当执行printfile脚本程序时产生的子shell。 
  dispfile脚本程序清单: 
   /**************begin dispfile**************/ 
   myfile=”List” 
   export myfile 
   echo “Displaying $myfile” 
   pr –t –n $myfile 
   printfile 
  /**************end dispfile***************/ 
   printfile脚本程序清单: 
    /**************begin printfile**************/ 
    echo “Printing $myfile” 
    lpr $myfile& 
   /**************end printfile**************/ 
  $dispfile 
    Displaying List 
   1 screen 
   2 modem 
   3 paper 
  Printing List 
  $ 
  定制Bash 
  在本节中已经介绍了很多定制Bash的方法,但是迄今为止,这些方法都只是对当前Bash对话有用。只要用户退出登录,所做的一切改变都会丢失。所以应该在Bash的初始化文件中做永久性的修改。 
  用户可以将每次启动Bash所需要执行的命令放入初始化文件中,最常见的命令就是alias命令和变量定义两种。系统中的每个用户在其主目录中都有一个.bash_profile文件,Bash每次启动时都将读取该文件,其中包含的所有命令都将被执行。 
  下面便是默认.bash_profile文件的代码: 
  #.bash_profile 
    #Get the aliases and functions 
    if [-f ~/.bashrc ];then 
    .~/.bashrc 
    fi 
    #User specific environment and startup programs 
    PATH=$PATH:$HOME/bin 
    ENV=$HOME/.bashrc 
    USERNAME=”” 
    Export USERNAME ENV PATH 
  思考题 
  1. Linux中的shell有哪些类型?Linux操作系统的缺省shell是什么? 
  2. shell有哪些通配符?各起什么作用? 
  3. shell中有哪三种引号?它们的作用有什么不同? 
  4. 要统计/usr/bin目录下的文件个数,用重定向和管道分别完成,怎样做? 
  5. 命令替换与重定向有何区别?举例说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值