shell的基本语法主要就是如何输入命令运行程序,以及如何在程序之间通过shell的一些参数提供便利手段来进行通信。
1.输入输出重定向
在Linux中,每一个进程都有三个特殊的文件描述指针:标准输入(Standard Input,文件描述指针为0)、标准输出(Standard Output,文件描述指针为1)、标准错误输出(Standard Error,文件描述指针为2)。这三个特殊的文件描述指针使进程在一般情况下接收标准输入终端的输入,同时由标准终端来显示输出,Linux同时也向使用者提供可以使用普通的文件或管道来取代这些标准输入输出设备。在shell中,使用者可以利用“>”和“<”来进行输入输出重定向。例如:
command>file:将命令的输出结果重定向到一个文件
2.管道pipe
pipe同样可以在标准输入输出和标准错误输出间做代替工作,这样一来,可以将某一个程序的输出送到另一个程序的输入,其语法如下:
command1| command2[| command3…]
也可以连同标准错误输出一起送入管道。
command1| &command2[|& command3…]
3.前台和后台
在shell下面,一个新产生的进程可以通过用命令后面的符号“;”和“&”来分别以前台和后台的方式来执行,语法如下:
command
产生一个前台的进程,下一个命令须等该命令运行结束后才能输入。
command &
产生一个后台的进程,此进程在后台运行的同时,可以输入其他的命令。
10.3.2 shell程序的变量和参数
像高级程序设计语言一样,shell也提供说明和使用变量的功能。对于shell来讲,所有变量的取值都是一个字符串,shell程序采用KaTeX parse error: Expected 'EOF', got '#' at position 321: …特权用户下,默认的主提示符是“#̲”;在普通用户下,默认的主提示…”。
PS2:在shell接收用户输入命令的过程中,如果用户在输入行的末尾输入“\”然后回车,或者当用户按回车键时shell判断出用户输入的命令没有结束时,显示这个辅助提示符,提示用户继续输入命令的其余部分,默认的辅助提示符是“>”。
2.用户定义的变量
用户可以按照下面的语法规则定义自己的变量:
变量名=变量值
要注意的一点是,在定义变量时,变量名前不应加符号“
”
,
在
引
用
变
量
的
内
容
时
则
应
在
变
量
名
前
加
“
”,在引用变量的内容时则应在变量名前加“
”,在引用变量的内容时则应在变量名前加“”;在给变量赋值时,等号两边一定不能留空格,若变量中本身就包含了空格,则整个字符串都要用双引号括起来。
在编写shell程序时,为了使变量名和命令名相区别,建议所有的变量名都用大写字母来表示。
有时我们想要在说明一个变量并对它设定为一个特定值后就不在改变它的值,这可以用下面的命令来保证一个变量的只读性。
readly 变量名
在任何时候,建立的变量都只是当前shell的局部变量,所以不能被shell运行的其他命令或shell程序所利用,export命令可以将一局部变量提供给shell执行的其他命令使用,其格式为
export 变量名
也可以在给变量赋值的同时使用export命令。
export 变量名=变量值
使用export说明的变量,在shell以后运行的所有命令或程序中都可以访问到。
3.位置参数
位置参数是一种在调用shell程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。位置参数之间用空格分隔,shell取第一个位置参数替换程序文件中的$1,第二个替换$2,依次类推。$0是一个特殊的变量,它的内容是当前这个shell程序的文件名,所以,$0不是一个位置参数,在显示当前所有的位置参数时是不包括
0
的
。
4
.
预
定
义
变
量
预
定
义
变
量
和
环
境
变
量
相
类
似
,
也
是
在
s
h
e
l
l
一
开
始
时
就
定
义
了
的
变
量
,
所
不
同
的
是
,
用
户
只
能
根
据
s
h
e
l
l
的
定
义
来
使
用
这
些
变
量
,
而
不
能
重
定
义
它
。
所
有
预
定
义
变
量
都
是
由
0的。 4.预定义变量 预定义变量和环境变量相类似,也是在shell一开始时就定义了的变量,所不同的是,用户只能根据shell的定义来使用这些变量,而不能重定义它。所有预定义变量都是由
0的。4.预定义变量预定义变量和环境变量相类似,也是在shell一开始时就定义了的变量,所不同的是,用户只能根据shell的定义来使用这些变量,而不能重定义它。所有预定义变量都是由符号和另一个符号组成的,常用的shell预定义变量有
$#:位置参数的数量。
$*:所有位置参数的内容。
$?:命令执行后返回的状态。
KaTeX parse error: Can't use function '$' in math mode at position 14: :当前进程的进程号。 $̲!:后台运行的最后一个进程号。…”变量最常见的用途是用作临时文件的名字以保证临时文件不会重复。
5.参数置换的变量
shell提供了参数置换能力以便用户可以根据不同的条件来给变量赋不同的值。参数置换的变量有四种,这些变量通常与某一个位置参数相联系,根据指定的位置参数是否已经设置类决定变量的取值,它们的语法和功能分别如下。
(1)变量=
参
数
−
w
o
r
d
:
如
果
设
置
了
参
数
,
则
用
参
数
的
值
置
换
变
量
的
值
,
否
则
用
w
o
r
d
置
换
。
即
这
种
变
量
的
值
等
于
某
一
个
参
数
的
值
,
如
果
该
参
数
没
有
设
置
,
则
变
量
就
等
于
w
o
r
d
的
值
。
(
2
)
变
量
=
{参数-word}:如果设置了参数,则用参数的值置换变量的值,否则用word置换。即这种变量的值等于某一个参数的值,如果该参数没有设置,则变量就等于word的值。 (2)变量=
参数−word:如果设置了参数,则用参数的值置换变量的值,否则用word置换。即这种变量的值等于某一个参数的值,如果该参数没有设置,则变量就等于word的值。(2)变量={参数=word}:如果设置了参数,则用参数的值置换变量的值,否则把变量设置成word,然后用word替换参数的值。注意,位置参数不能用于这种方式,因为在shell程序中不能为位置参数赋值。
(3)变量=
参
数
?
w
o
r
d
:
如
果
设
置
了
参
数
,
则
用
参
数
的
值
置
换
变
量
的
值
,
否
则
就
显
示
w
o
r
d
并
从
s
h
e
l
l
中
退
出
;
如
果
省
略
了
w
o
r
d
,
则
显
示
标
准
信
息
。
这
种
变
量
要
求
一
定
等
于
某
一
个
参
数
的
值
,
如
果
该
参
数
没
有
设
置
,
就
显
示
一
个
信
息
,
然
后
退
出
,
因
此
这
种
方
式
常
用
于
出
错
指
示
。
(
4
)
变
量
=
{参数?word}:如果设置了参数,则用参数的值置换变量的值,否则就显示word并从shell中退出;如果省略了word,则显示标准信息。这种变量要求一定等于某一个参数的值,如果该参数没有设置,就显示一个信息,然后退出,因此这种方式常用于出错指示。 (4)变量=
参数?word:如果设置了参数,则用参数的值置换变量的值,否则就显示word并从shell中退出;如果省略了word,则显示标准信息。这种变量要求一定等于某一个参数的值,如果该参数没有设置,就显示一个信息,然后退出,因此这种方式常用于出错指示。(4)变量={参数+word}:如果设置了参数,则用word置换变量,否则不进行置换。
上述四种形式中的参数既可以是位置参数,也可以是另一个变量,只是用位置参数的情况比较多。
3.24嵌入式拓展
最新推荐文章于 2024-08-15 16:25:25 发布