第一、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. 命令替换与重定向有何区别?举例说明。
分享到:
相关推荐
### Linux Shell命令初学解析 #### 目标 - 了解Shell的概念及其作用 - 掌握Shell的常用命令 - 学会使用vi编辑器 #### 一、了解Shell **Shell** 是用户与Linux操作系统之间的重要接口,它允许用户通过命令行的...
例如,HOME变量存储了用户的家目录路径,PATH变量包含了系统搜索命令的目录路径,TERM表示终端类型,UID是当前用户的ID,PWD代表当前工作目录,PS1是Shell的主提示符,PS2是辅助提示符。这些环境变量在Shell启动时...
接下来,注释在Shell脚本中使用`#`符号,从该符号到行末的所有内容都被视为注释,不会被执行。在编写脚本时,注释有助于提高代码的可读性。 执行Shell脚本可以通过几种方式完成。可以直接使用Shell命令,如`bash ...
Windows的Shell命令,通常指的是命令提示符(Command Prompt)或PowerShell中的命令,与Unix/Linux系统的Shell命令有所不同。虽然它们都是交互式的文本界面,用于执行操作系统级别的任务,但语法和可用命令有显著的...
Linux Shell编程是Linux操作系统中的一种重要工具,它允许用户通过编写脚本来自动化一系列命令操作,提高了工作效率。在本文中,我们将深入探讨Linux Shell的基本概念、Shell编程基础、输出和输入、运算符以及Shell...
Linux Shell 脚本学习笔记 ...Linux Shell 脚本学习笔记涵盖了 Linux Shell 脚本的基础知识点,包括命令提示符、变量、重定向、管道、环境变量、数学计算、退出脚本、结构化命令、条件测试、文件比较等。
- **`\$`**:表示命令提示符,默认情况下,对于普通用户是“$”,对于root用户则是“#”。 #### 三、默认的PS1配置 默认情况下,`PS1`变量的值被设置为`'\[\u@\h\W\]\$'`,这意味着提示符将显示为: ``` [root@...
3. **环境变量**:Shell中的环境变量存储着系统信息,例如`PATH`定义了命令查找路径,`HOME`表示用户的主目录,`PS1`定义命令提示符样式。 4. **管道(Pipe)**:`|`符号用于连接两个命令,将前一个命令的输出作为...
* PS1变量:PS1(Prompt String 1)变量包含了shell提示符,$符号 * PS2变量:是为第二个提示符设置值的环境变量 * LOGNAME变量:包含用户的注册名字 * SHLVL变量:该变量包含当前工作的shell level * SHELL...
根据给定文件的信息,我们可以深入探讨Shell命令,特别是Bash shell的特点与操作,这对于学习Linux操作系统和进行系统管理至关重要。 ### Shell命令Bash的特点 **1. 自动补齐命令行** Bash支持自动补齐功能,当...
- **内容覆盖范围**:全面介绍Linux Shell Scripting的基础知识、常用命令及高级技巧。 #### 第一章:Linux 快速入门 - **Linux 是什么** - 开源操作系统,核心为Linux内核。 - **Linux 的创建者** - Linus ...
在Linux Shell中,通过按Tab键可以实现命令和路径的自动补全。这一功能极大地方便了用户,提高了工作效率。 ### 总结 通过对Linux Shell的深入了解,我们可以更好地利用Shell来提高日常工作的效率。无论是通过定制...
Linux命令提示符由环境变量`$PS1`控制,你可以根据需要自定义这个提示符。 执行Shell脚本有两种方式:交互式和非交互式。通常,我们在终端中输入命令进行交互式操作,但也可以将一系列命令写入一个文件,形成Shell...
在Shell编程中,`PS1`是一个特殊的变量,它定义了命令提示符的格式。例如,`export PS1='[\u@\d \W]\$'`将提示符设置为显示用户名、日期、工作目录和提示符符号。在`PS1`中,有多个特殊字符,如`\d`表示日期,`\h`是...
首先,命令提示符`[dyl@localhost ~]$`是用户在终端交互时看到的提示,它表明用户处于主目录(`~`),用户名是`dyl`,主机名为`localhost`。通过修改`PS1`环境变量,可以自定义这个提示符的样式。 其次,Shell脚本是...
### Linux实验六 Shell变量知识点详解 #### 一、实验目的 1. **熟悉Shell变量**: - Shell变量是Shell编程中的基本概念之一,用于存储数据。这些数据可以是文件名、数字或文本字符串。 - 变量分为两种类型:用户...
Shell是Linux系统中的一个命令解释器,它能够接收用户输入的命令并执行,同时也是一个强大的编程环境,允许用户编写Shell脚本来批量处理一系列命令。以下是关于Linux Shell编程的一些关键知识点: 1. **变量**:...
Shell Prompt(提示符)是Shell用来通知用户可以输入命令的一种方式。它通常以特定的符号(如$或#,分别对应普通用户和root用户)显示在屏幕上的游标左侧。游标是用户输入的指示器,随着用户键入字符而移动。当用户...