shell脚本构建基本脚本

Posted zqq_hello_world

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本构建基本脚本相关的知识,希望对你有一定的参考价值。

构建基本脚本

shell脚本关键在于输入多个命令并处理每个命令的结果,甚至可以将一个命令的结果传递给另一个命令。

创建shell脚本

使用touch命令创建文件:touch firstshell.sh

使用chmod命令赋予执行权限:chmod u+x firstshell.sh

#!/bin/bash 
# 井号(#)是注释 
echo 'this is first shell script'

上面脚本第一行(#!/bin/bash)表示用哪个shell来运行,第二行是注释部分,echo是输出命令,运行这个脚本会在控制台打印一段话。

执行脚本的两种方式

  1. 将shell脚本文件所处的目录添加到PATH环境变量中,任何地方输入脚本名称即可执行脚本
  2. 输入绝对或相对文件路径来引用shell脚本文件

shell脚本中的变量

shell脚本中可以使用系统的环境变量和自定义用户变量

#!/bin/bash 
#使用系统环境变量,通过($)符使用变量,特殊符号用\\转译,单引号不会把$识别成去读取变量 
echo  "Path环境变量为:$PATH"
#自定义变量,注意变量名称区分大小写,带空格需要用引号 
var1=zqq 
var2=var1 
var3="hello world" 
echo "打印用户自定义变量:var1=$var1,var2=$var2,var3=$var3"

命令输出赋给变量

shell脚本可以从命令输出中提取信息,并将其赋给变量。把输出赋给变量后就可以在脚本中很方便的使用。

把命令输出赋给变量的两种方式:

  1. 反向引号(`)

  2. $()格式

    #!/bin/bash 
    #将date命令输出结果赋变量 
    var1=`date` 
    var2=$(date)
    

重定向输入和输出

有些时候需要将命令的输出保存到文件中,而不仅仅只显示在显示器上。base shell提供了操作符可以将输出重定向到另一个位置。也可以输入。

输出重定向

可以用大于号(>)进行输出重定向,也可以用双大于号(>>)进行输出重定向。他们到区别是单大于号是覆盖操作,如果已经有文件,会覆盖掉已经存在的文件,而双大于号是追加输出,如果文件已经存在会把输出的内容追加在后面。

#!/bin/bash 
#输出重定向,覆盖将时间命令的输出到文件中 
date > /logs/test.log 
#输出重定向,追加 
date >> /logs/test.log

输入重定向

输入重定向将文件内容重定向命令。

#创建啊atext文件,把文件内容重定向到wc命令 
wc < atext 
#内联输入重定向,直接将文本内容重定向到命令 
wc << EOF 
> aa
> bb
> cc
> dd
> ee
> ff
> EOF

管道

我们可以一个命令的输出重定向到另一个命令,这个过程叫作管道连接(piping)。管道符号(|)。可以通过管道符号把一个命令的输出重定向到另一个命令。

#常用的管道命令,查找程序进程信息。通过管道符号把进程信息的输出结果给到grep命令, 
#然后搜索到java关键字的信息 
ps -ef | grep java

控制脚本

Linux利用信号与运行在系统上的进程进行通信。base shell允许用键盘上的组合建生成两种基本的Linux信号

1、中断进程:ctrl + c

ctrl+c会生成终止进程信号(2),并发送给当前shell中运行的所有进程,停止shell中当前运行的进程。

2、暂停进程:ctrl + z

ctrl+z会生成一个暂停信号停止shell中运行的进程,但不终止进程。

捕获信号

捕获信号可以在信号出现时捕获他们并执行其他命令。trap命令允许指定shell脚本要监看并从shell中拦截的信号。如果脚本中收到了trap命令中列出的信号,该信号不再由shell处理,而是由本地处理。

命令格式:trap [命令] [信号值]

阻止用户通过ctrl+c来停止脚本

#!/bin/bash 
#阻止用户通过ctrl+c来停止脚本 
trap "echo 'Sorry,dont stop!'" SIGINT 
#睡10s,期间通过ctrl+c无法终止脚本 
sleep 10 
#睡眠期间ctrl+c并不会影响后续执行下面的输出,如果不通过trap捕获则不会输出直接中断 
echo "end print"

捕获脚本退出

#!/bin/shell 
#捕获退出 
trap "echo 'script exit'" EXIT 
sleep 10 
echo "the end"

修改或移除捕获

修改捕获只需要在脚本别的地方重新使用trap捕获,如果在修改前被捕获到则会执行之前定义的,否则会执行之后的定义。删除捕获只需在trap命令与希望恢复默认行为的信号列表之间建设两个破折号。

#!/bin/bash 
trap "echo 'Sorry,dont stop!'" SIGINT 
sleep 10 
echo "update before" 
#修改捕获 
trap "echo 'Sorry,dont stop!===='" SIGINT 
sleep 10 
echo "update end" #删除捕获 
trap — SIGINT 
sleep 10 
echo "end print"

以后台模式运行脚本

以后台模式运行脚本只需在脚本后加一个&符号。以后台模式运行脚本,会返回一个带有作业号的进程号的信息,并在后台运行。不过后台运行脚本的输出会打印在控制台。

#后台模式运行脚本 
./shell.sh &

执行脚本后加&符号,在主shell退出时,会同时结束在后台运行进程,可以加nohup来阻止进行结束

#使用nohup命令,如果会话结束时,脚本会忽略终端发过来挂起信号 
nohup ./shell.sh &

以上是关于shell脚本构建基本脚本的主要内容,如果未能解决你的问题,请参考以下文章

shell--构建基本脚本

Linux Shell 构建基本脚本

Linux Shell脚本编写——构建基本脚本

Shell编程—构建基本脚本

:构建基本脚本

:构建基本脚本