shell脚本简单操作

原文地址:http://c.biancheng.net/shell/

1、通过 cat 命令来查看当前 Linux 系统的可用 Shell:

$ cat /etc/shells

2、查看当前 Linux 的默认 Shell,那么可以输出 SHELL 环境变量:

$ echo $SHELL

echo是一个 Shell 命令,用来输出变量的值,我们将在《Shell echo命令》中详细介绍它的用法。
SHELL是 Linux 系统中的环境变量,它指明了当前使用的 Shell 程序的位置,也就是使用的哪个 Shell。

3、CentOS 中,默认的提示符格式为:

[mozhiyan@localhost ~]$

这种格式包含了以下三个方面的信息:
启动 Shell 的用户名,也即 mozhiyan;
本地主机名称,也即 localhost;
当前目录,波浪号~是主目录的简写表示法。

4、Shell 通过PS1和PS2两个环境变量来控制提示符格式:

PS1 控制最外层命令行的提示符格式。
PS2 控制第二层命令行的提示符格式。

5、要显示提示符的当前格式,可以使用 echo 输出 PS1 和 PS2:

[mozhiyan@localhost ~]$ echo $PS1
[\u@\h \W]\$
[mozhiyan@localhost ~]$ echo $PS2
>
[mozhiyan@localhost ~]$ 

6、Bash shell 提示符可以包含的要素

字符 描述
\a 铃声字符
\d 格式为“日 月 年”的日期
\e ASCII转义字符
\h 本地主机名
\H 完全合格的限定域主机名
\j shell当前管理的作业数
\1 shell终端设备名的基本名称
\n ASCII换行字符
\r ASCII回车
\s shell的名称
\t 格式为“小时:分钟:秒”的24小时制的当前时间
\T 格式为“小时:分钟:秒”的12小时制的当前时间
@ 格式为am/pm的12小时制的当前时间
\u 当前用户的用户名
\v bash shell的版本
\V bash shell的发布级别
\w 当前工作目录
\W 当前工作目录的基本名称
! 该命令的bash shell历史数
# 该命令的命令数量
$ 如果是普通用户,则为美元符号$;如果超级用户(root 用户),则为井号#。
\nnn 对应于八进制值 nnn 的字符
\ 斜杠
[ 控制码序列的开头
] 控制码序列的结尾

7、可以通过修改 PS1 变量来修改提示符格式,例如:

[mozhiyan@localhost ~]$ PS1="[\t][\u]\$ "
[17:27:34][mozhiyan]$ 

8、第一个shell

在 test.sh 中输入代码:
#!/bin/bash
echo "Hello World !"  #这是一条语句

第1行的#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell;
后面的/bin/bash就是指明了解释器的具体位置。

第 2 行的 echo 命令用于向标准输出文件(Standard Output,stdout,一般就是指终端)输出文本。
在.sh文件中使用命令与在终端直接输入命令的效果是一样的。

第 2 行的#及其后面的内容是注释。Shell 脚本中所有以#开头的都是注释(当然以#!开头的除外)。
写脚本的时候,多写注释是非常有必要的,以方便其他人能看懂你的脚本,
也方便后期自己维护时看懂自己的脚本——实际上,即便是自己写的脚本,在经过一段时间后也很容易忘记。

9、读取用户输入的数据

#!/bin/bash
# Copyright (c) http://c.biancheng.net/shell/

echo "What is your name?"
read PERSON
echo "Hello, $PERSON"
	
第 5 行中表示从终端读取用户输入的数据,并赋值给 PERSON 变量。
read 命令用来从标准输入文件(Standard Input,stdin,一般就是指终端)读取用户输入的数据。

第 6 行表示输出变量 PERSON 的内容。注意在变量名前边要加上$,否则变量名会作为字符串的一部分处理。

10、"."

点号用于执行某个脚本,甚至脚本没有可执行权限也可以运行。
. ./test.sh

11、source

与点号类似,source 命令也可读取并在当前环境中执行脚本,同时还可返回脚本中最后一个命令的返回状态;
如果没有返回值则返回 0,代表执行成功;如果未找到指定的脚本则返回 false。
source test.sh

12、变量的值可以由单引号’ '包围,也可以由双引号" "包围,它们到底有什么区别呢?不妨以下面的代码为例来说明:

#!/bin/bash
url="http://c.biancheng.net"
website1='C语言中文网:${url}'
website2="C语言中文网:${url}"
echo $website1
echo $website2

运行结果:
C语言中文网:${url}
C语言中文网:http://c.biancheng.net

以单引号''包围变量的值时,单引号里面是什么就输出什么,
即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。
这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景。

13、删除变量

unset aa

14、设置变量只读

readonly aa

15、定义局部变量

local cc

16、变量导出为环境变量(子bash可以使用)

export a 

17、进入子bash

bash

18、查看当前bash进程id

echo $$

19、定义变量时同时导出

export bb=33

20、将环境变量写入启动文件

21、$n用来接收参数

test.sh

#!/bin/bash
echo "Language: $1"
echo "URL: $2"

运行 test.sh,并附带参数:
$ . ./a.sh Shell http://c.biancheng.net/shell/

运行结果:
Language: Shell
URL: http://c.biancheng.net/shell/

22、shell特殊变量

变量 含义
$0 当前脚本的文件名。
$n(n≥1) 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。当被双引号" "包含时,$@ 与 $* 稍有不同,我们将在《Shell *和 @的区别》一节中详细讲解。
$? 上个命令的退出状态,或函数的返回值,我们将在《Shell $?》一节中详细讲解。
$$ 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。

23、杀死查询出来的规定进程

ps -ef | grep xxxx | awk ‘{print $2}’ | xargs kill -9

猜你喜欢

转载自blog.csdn.net/m0_37598340/article/details/86526936