简介
Shell 本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并发(并行)的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性及其使用方法,是用好Linux系统的关键。
Shell有各种不同的shell,每种shell有不同的命令提示符,一般是在用户当前目录上加$、%、#或>符号。现在用得最多的也是一般常的shell是bash。
简单操作
查看系统默认的shell,可以使用echo命令来查看
Echo $SHELL
/bin/bash --这是当前默认的shell
这种命令的格式也是可以的。
Echo ${SHELL}
/bin/bash --这是当前默认的shell
另外,执行finger命令查询用户数据,也能看出用户默认的shell
# finger –l root
Login:root Name:root
Directory: /root Shell:/bin/bash
Shell的功能
1.补全命令行
如:当用户输入想输入clear命令的时候,只需要输入cl,然后按tab键就可以自动补全了,而且不光是能补命令,像什么文件目录都可以补的。
2.命令历程
所谓的命令历程,也就是用户可以使用上下左右来恢复已经使用过的命令,或者是输入过的一些字符。
3.通配符(shell元字符)
如:*、?、[]等等,如ls test? 后面只能没有或者是再跟一个字符,ls [a-c]*可以列出a-c范围内的所有字符。
4.使用输入/输出重定向和管道
“>”,后面跟一个文件名,可以把命令执行的结果输入文件里面。
“<”,后面跟一个已经存在的文件,可以把文件里面的内容输入到当前标准输入窗口。“>>”,追加到一个已经存在的文件。
“|”, 管道,即可以把上一个命令的结果当作下一个命令的输入。
5.作业控制
如:find / -name SCSI –print & -代表在后台运行
使用ctrl+d 能够使当前的命令在后台执行,使用bj命令可以使进程恢复在后台执行。
用jobs可以显示当前正在后台运行的作业名单。
6.特殊字符
&:以后台的方式运行。
;:用来分隔多个命令,让命令依次执行。
.: 代表当前的目录。
..: 表示上一层目录,例如:cd .. ,可以返回上一层目录。
~: 代表用户主目录。
#:表示注释。
\: 跳脱字符(Escape),解除特殊字符的含义。
Shell的环境变量与设置
对bash shell来讲,默认的全局的系统环境变量是在“/etc/profile”中定义的,而一些定制的变量可以在用户子目录中的文件“.bashrc”中找到。
1.shell定义的环境变量
Shell在开始执行时就已经定义好的变量
HOME:保存着用户的主目录
PATH:保存着一些可执行文件或命令的目录
TERM:显示用户的终端类型
UID:当前用户的识别字
PWD:当前工作目录的绝对路径名
PSI:主提示符
PS2 :当用户命令没有输入完,或者在最后输入了一个“\”的时候代表用户还要进入命令输入,默认的是“>”
2.用户定义的变量
用户可以按照下面的格式来定义变量
变量名=变量值 注意“=”号两边不能留空格,建议所有的变量名都用大写字母
如:HI=”hello world”
说明一个变量以后不可更改
Readonly 变量名
Export 可以让shell把当前的变量用作shell运行的其它命令或者是shell程序直接使用。
Export 变量名
Export 变量名=变量值
3.位置参数
格式是这样的$1、$2等等,表示调用shell程序后台跟的参数。值得注意的是$0,表示执行的shell文件的名字。
4.预定义的变量
在shell一开始就定义了的变量,不能重新定义它,所有的预定义变量都由$字符和另外一个符号组成的,常用的shell预定义变量有:
$#:位置参数的数量
$*:所有位置参数的内容
$?:命令执行后返回的状态
$$:当前进程的进程号
$!:后台运行的最后一个进程号
$0:当前执行的进程名
5.参数置换的变量
name=${name2:-word}
当name2这个变量已经设置过了(就是说name2这个变量设置过值),则把它的值赋值给name。如果name2这个变量没有设置过值,则把word当作name的值。
name=${name2:=word}
当name2这个变量已经设置过了,就把name2的值赋值给name这个变量,如果name2没有设置过,则把word赋值给name2
name=${name2:?word}
当name2这个变量设置过了,就把name2的值赋值给name,如果没有设置过值,则打印出word,但并不把值赋值给name
name=${name2:+word}
当name2这个变量有值,则把word的值赋给name,如果name2没有值,则什么都不设置。
Shell 本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并发(并行)的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性及其使用方法,是用好Linux系统的关键。
Shell有各种不同的shell,每种shell有不同的命令提示符,一般是在用户当前目录上加$、%、#或>符号。现在用得最多的也是一般常的shell是bash。
简单操作
查看系统默认的shell,可以使用echo命令来查看
Echo $SHELL
/bin/bash --这是当前默认的shell
这种命令的格式也是可以的。
Echo ${SHELL}
/bin/bash --这是当前默认的shell
另外,执行finger命令查询用户数据,也能看出用户默认的shell
# finger –l root
Login:root Name:root
Directory: /root Shell:/bin/bash
Shell的功能
1.补全命令行
如:当用户输入想输入clear命令的时候,只需要输入cl,然后按tab键就可以自动补全了,而且不光是能补命令,像什么文件目录都可以补的。
2.命令历程
所谓的命令历程,也就是用户可以使用上下左右来恢复已经使用过的命令,或者是输入过的一些字符。
3.通配符(shell元字符)
如:*、?、[]等等,如ls test? 后面只能没有或者是再跟一个字符,ls [a-c]*可以列出a-c范围内的所有字符。
4.使用输入/输出重定向和管道
“>”,后面跟一个文件名,可以把命令执行的结果输入文件里面。
“<”,后面跟一个已经存在的文件,可以把文件里面的内容输入到当前标准输入窗口。“>>”,追加到一个已经存在的文件。
“|”, 管道,即可以把上一个命令的结果当作下一个命令的输入。
5.作业控制
如:find / -name SCSI –print & -代表在后台运行
使用ctrl+d 能够使当前的命令在后台执行,使用bj命令可以使进程恢复在后台执行。
用jobs可以显示当前正在后台运行的作业名单。
6.特殊字符
&:以后台的方式运行。
;:用来分隔多个命令,让命令依次执行。
.: 代表当前的目录。
..: 表示上一层目录,例如:cd .. ,可以返回上一层目录。
~: 代表用户主目录。
#:表示注释。
\: 跳脱字符(Escape),解除特殊字符的含义。
Shell的环境变量与设置
对bash shell来讲,默认的全局的系统环境变量是在“/etc/profile”中定义的,而一些定制的变量可以在用户子目录中的文件“.bashrc”中找到。
1.shell定义的环境变量
Shell在开始执行时就已经定义好的变量
HOME:保存着用户的主目录
PATH:保存着一些可执行文件或命令的目录
TERM:显示用户的终端类型
UID:当前用户的识别字
PWD:当前工作目录的绝对路径名
PSI:主提示符
PS2 :当用户命令没有输入完,或者在最后输入了一个“\”的时候代表用户还要进入命令输入,默认的是“>”
2.用户定义的变量
用户可以按照下面的格式来定义变量
变量名=变量值 注意“=”号两边不能留空格,建议所有的变量名都用大写字母
如:HI=”hello world”
说明一个变量以后不可更改
Readonly 变量名
Export 可以让shell把当前的变量用作shell运行的其它命令或者是shell程序直接使用。
Export 变量名
Export 变量名=变量值
3.位置参数
格式是这样的$1、$2等等,表示调用shell程序后台跟的参数。值得注意的是$0,表示执行的shell文件的名字。
4.预定义的变量
在shell一开始就定义了的变量,不能重新定义它,所有的预定义变量都由$字符和另外一个符号组成的,常用的shell预定义变量有:
$#:位置参数的数量
$*:所有位置参数的内容
$?:命令执行后返回的状态
$$:当前进程的进程号
$!:后台运行的最后一个进程号
$0:当前执行的进程名
5.参数置换的变量
name=${name2:-word}
当name2这个变量已经设置过了(就是说name2这个变量设置过值),则把它的值赋值给name。如果name2这个变量没有设置过值,则把word当作name的值。
name=${name2:=word}
当name2这个变量已经设置过了,就把name2的值赋值给name这个变量,如果name2没有设置过,则把word赋值给name2
name=${name2:?word}
当name2这个变量设置过了,就把name2的值赋值给name,如果没有设置过值,则打印出word,但并不把值赋值给name
name=${name2:+word}
当name2这个变量有值,则把word的值赋给name,如果name2没有值,则什么都不设置。