shell学习

1、shell的执行过程

shell学习

读入命令,解析命令参数,fork子进程

子进程:执行execve跟换进程映像,执行命令对应的可执行文件,退出让出cpu并向父进程报告

父进程:若命令中无&符,则等待子进程中止,若有则仅需执行终端进程,等待命令输入

2、shell变量

shell变量是有类型的,一般有整型(整数)、数值型(小数)、字符串。

$为变量替换符,${param}与$param,功能一样。推荐使用加{},应为方便程序识别变量

3、shell字符串

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

 

字符串提取:

以下实例从字符串第 2 个字符开始截取 4 个字符:

string="runoob is a great site"
echo ${string:1:4} # 输出 unoo

 

4、shell判断

 

If [expression]; then

Statements

Fi

 

或者

If [expression]; then

Statements

Else

Statements

Fi

 

对字符串、数值判断操作

对应的操作

整数操作

字符串操作

相同

-eq

=

不同

-ne

!=

大于

-gt

>

小于

-lt

<

大于或等于

-ge

 

小于或等于

-le

 

为空

 

-z

不为空

 

-n

对文件的判断

运算符

含义( 满足下面要求时返回 TRUE

-e file

文件 file 已经存在

-f file

文件 file 是普通文件

-s file

文件 file 大小不为零

-d file

文件 file 是一个目录

-r file

文件 file 对当前用户可以读取

-w file

文件 file 对当前用户可以写入

-x file

文件 file 对当前用户可以执行

-g file

文件 file 的 GID 标志被设置

-u file

文件 file 的 UID 标志被设置

-O file

文件 file 是属于当前用户的

-G file

文件 file 的组 ID 和当前用户相同

file1 -nt file2

文件 file1 比 file2 更新

file1 -ot file2

文件 file1 比 file2 更老

 

5、Shell脚本中$0、$?、$!、$$、$*、$#、[email protected]等的意义

变量说明

 

$$

Shell本身的PID(ProcessID)

$!

Shell最后运行的后台Process的PID

$?

最后运行的命令的结束代码(返回值)

$-

使用Set命令设定的Flag一览

$*

所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。

[email protected]

所有参数列表。如"[email protected]"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。

$#

添加到Shell的参数个数

$0

Shell本身的文件名

$1~$n

添加到Shell的各参数值。$1是第1参数、$2是第2参数…。

 

脚本举例

 

我们先写一个简单的脚本,执行以后再解释各个变量的意义

# touch variable

# vi variable

脚本内容如下:

#!/bin/sh

echo "number:$#"

echo "scname:$0"

echo "first :$1"

echo "second:$2"

echo "argume:[email protected]"

保存退出

赋予脚本执行权限

# chmod +x variable

执行脚本

# ./variable aa bb

number:2

scname:./variable

first: aa

second:bb

argume:aa bb

 

结果分析

 

通过显示结果可以看到:

$# 是传给脚本的参数个数

$0 是脚本本身的名字

$1是传递给该shell脚本的第一个参数

$2是传递给该shell脚本的第二个参数

[email protected] 是传给脚本的所有参数的列表

 

来自 <https://blog.****.net/slovyz/article/details/47400107>