转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8177697.html

一:输入

1:运行时参数

可以在启动脚本时,在其后输入参数。

./脚本 参数1 参数2...

bash中使用位置参数来接收启动时输入的参数:

$:程序名(脚本名)
$:第1个参数
$:第2个参数
$:第3个参数
$:第4个参数
$:第5个参数
$:第6个参数
$:第7个参数
$:第8个参数
$:第9个参数
超过9个的,要加花括号来读取:
${10}:第10个参数
......

获取脚本名:

$[basename $] :不加basename的话,获取到的脚本名会包含路径

特殊参数:

$#:统计运行时参数个数
$*:将所有运行时参数作为一个整体来取用
$@:将所有运行时参数作为一个list返回,可以用for去遍历

移动参数:

shift :将运行时参数依次左移。即:$2赋值给了$,而原来最左边的参数被移除,丢弃。
shift n:将参数依次左移n个位置。
用途:可以用于遍历参数列表,尤其是不知道参数有几个,参数比较多时。

2:处理选项与参数

getopts 格式 变量

例如:
while getopts ab:c opt
do
case "$opt" in
a) ...
b)
c)....
esac
done

3:读取用户输入

read var:读取用户输入,存到var中
read -p "提示文本" var
read -t 超时限制 var :防止超时
read -s var:隐秘输入,用户输入在屏幕上不显示,多用于密

4:从文件读取输入

cat 文件 | while read line
do
每次line都保存了从文件中读取的一行数据,$line 就是当前次遍历读取到的内容。
done

二:输出

1:脚本中重定向

exec > 文件  :将标准输出重定向到某个文件
echo ...
echo ...
echo ... :这些语句的输出都写入了上述文件
exec < 文件 :将输入重定向到了某个文件
那么之后的 read 命令默认从上面文件读取数据

2:阻止输出

对于某些警报、报错、无用的信息,我们不想让用户看见:可以将他们输出重定向到  /dev/null   文件。

3:向显示器和文件输出

命令1 | tee 文件2 :将命令1的输出,重定向到显示器和文件2,覆盖
命令1 | tee -a 文件2 :将命令1的输出,重定向到显示器和文件2,追加

三:脚本控制

1:信号控制

信号种类:

SIGHUP            终止进程    终端线路挂断
SIGINT   终止进程 中断进程
SIGQUIT   建立CORE文件   终止进程,并且生成core文件
SIGILL   建立CORE文件 非法指令
SIGTRAP   建立CORE文件 跟踪自陷
SIGBUS   建立CORE文件 总线错误
SIGSEGV   建立CORE文件 段非法错误
SIGFPE   建立CORE文件 浮点异常
SIGIOT   建立CORE文件 执行I/O自陷
SIGKILL   终止进程 杀死进程
SIGPIPE   终止进程 向一个没有读进程的管道写数据
SIGALARM   终止进程 计时器到时
SIGTERM   终止进程 软件终止信号
SIGSTOP   停止进程 非终端来的停止信号
SIGTSTP   停止进程 终端来的停止信号
SIGCONT   忽略信号 继续执行一个停止的进程
SIGURG   忽略信号 I/O紧急信号
SIGIO   忽略信号 描述符上可以进行I/O
SIGCHLD   忽略信号 当子进程停止或退出时通知父进程
SIGTTOU   停止进程 后台进程写终端
SIGTTIN   停止进程 后台进程读终端
SIGXGPU   终止进程 CPU时限超时
SIGXFSZ   终止进程 文件长度过长
SIGWINCH   忽略信号 窗口大小发生变化
SIGPROF   终止进程 统计分布图用计时器到时
SIGUSR1   终止进程 用户定义信号1
SIGUSR2   终止进程 用户定义信号2
SIGVTALRM  终止进程 虚拟计时器到时

中断脚本运行:

Ctrl+C

暂停脚本:此时,作业被暂停,并且保留在内存中。我们可以在后面根据作业ID重启作业,继续运行。

Ctrl+Z

终止脚本:杀死进程。

kill - 作业ID

捕捉信号并响应:

可以使用trap命令来捕捉信号,当脚本在运行过程中检测到Linux信号时,执行相应的操作。

trap 响应操作 要捕捉的信号

例如:
#!/bin/bash
trap "禁止暂停!" SIGINT #这样,在该脚本运行过程中,如果检测到Ctrl+C,则会显示 “禁止暂停!”,脚本会继续运行。
......其他代码

移除捕获:

trap -- 信号 :可以在脚本中的某一处,移除掉对信号的捕获

2:后台运行脚本

./脚本.sh &  #:后台运行脚本,只需在后面加个  &  即可
nohup ./脚本名.sh &   #:nohup阻断了所有发送给该进程的SIGHUP信号,这样在终端退出时也不影响进程的继续运行。

3:作业控制

查看作业:

jobs   :查看当前shell正在处理的作业

重启作业:前面我们使用Ctrl+Z暂停了作业,现在我们来重启它。

bg 作业号     #在后台重启一个作业
fg 作业号 #在前台重启一个作业

作业的谦让度:对CPU的谦让使用度

nice -n 谦让度 ./脚本名   :在启动脚本时指明谦让度,谦让度由  - ~ +
renice -n 新谦让度 -p 进程id :更改作业谦让度

4:计划作业

定时运行:

at -f 脚本文件 time  :在time执行脚本文件

定时作业的输出:

定时作业默认将作业结果通过电子邮件发送。我们可以在运行的脚本文件中重定向输出到具体的文件。

查看等待中的定时作业:

atq

删除等待中的作业:

atrm 作业号

5:周期性作业

需要脚本在每天同一时刻、每月、每周等等周期性执行,可以使用cron程序。

查看cron表:

crontab -l

添加cron任务:

crontab -e
此时进入文本编辑器,添加条目。
定时条目的格式为:min hour day month dayOfweek command #一条条目制定了在 周几、某月某日某时某分 执行某指令

Shell脚本编程基础笔记二的更多相关文章

  1. Shell脚本编程基础笔记一

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8176137.html 一:脚本文件的创建.格式.运行 1:创建shell脚本 首先,要创建一个文件 touch ...

  2. SHELL脚本编程基础知识

    SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...

  3. Linux shell脚本编程基础之练习篇

    shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...

  4. shell脚本编程基础介绍

    Linux系统——shell脚本编程基础介绍 1.什么是shell 它是一个命令解释器,在linux/unix操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种操作输出的结果 ...

  5. linux基础—课堂随笔_03 SHELL脚本编程基础

    shell脚本编程基础 条件选择:if语句 选择执行: 注意:if语句可嵌套 单分支 if(开头)判断条件:then条件为真的分支代码 fi(结尾) 双分支 if(开头)判断条件:then条件为真的分 ...

  6. shell脚本编程基础

       最近学习了shell脚本编程,感觉自己的脚本写的不太好,所以想把shell脚本相关的知识系统的整理一下,便于以后的学习和使用. 一.shell脚本基础    shell脚本是利用shell的功能 ...

  7. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---57

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  8. Linux Shell脚本编程-基础1

    概述:  shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础 ...

  9. Shell 脚本编程基础

    通过本文记录学习Linux Shell的一些笔记思考和总结,以加强记忆和理解.主要学习参考资料有: 1.<鸟哥的Linux私房菜-基础篇>第四版 2.菜鸟教程——Linux教程 3.ear ...

随机推荐

  1. python 全栈开发,Day122(人工智能初识,百度AI)

    一.人工智能初识 什么是智能? 我们通常把人成为智慧生物,那么”智慧生物的能力”就是所谓的”智能”我们有什么能力?听,说,看,理解,思考,情感等等 什么是人工智能? 顾名思义就是由人创造的”智慧能力” ...

  2. Kafka动态增加Topic的副本

    一.kafka的副本机制 由于Producer和Consumer都只会与Leader角色的分区副本相连,所以kafka需要以集群的组织形式提供主题下的消息高可用.kafka支持主备复制,所以消息具备高 ...

  3. vue组件库(五):icon管理

    图标管理 前言 一.常用图标库网站 1.http://icomoon.io 阿里巴巴矢量图 身边的 2.http://fontawesome.dashgame.com iconmoon 3.http: ...

  4. 步步为营-36-ADO.Net简介

    与数据库进行连接交互 方法一 #region 01连接对象 //01 连接字符串 string connstr = "server=.;uid=sa;pwd=sa;database=Demo ...

  5. 《剑指offer》-判断对称二叉树

    题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 思路上还是广度优先搜索(BFS)来做的.BFS是依托于STL的queue作为容 ...

  6. 【C++ Primer 第13章】5. 动态内存管理类

    StrVec类的设计 [题目描述]:我们将实现标准库vector类的一个简化版本,我们所做的一个简化是不使用模板,我们类只用于string,因此,它被命名为StrVec. #include<io ...

  7. php手动搭建wamp环境(一)--之 Windows系统下PHP环境搭建

    1.PHP环境搭建的前提是 Apache HTTP Server (Apache 服务器)已经安装部署成功,并可以正常访问到服务器的主页面.Apache HTTP Server 的安装部署已经在上一篇 ...

  8. [转] Java中public,private,final,static等概念的解读

    作为刚入门Java的小白,对于public,private,final,static等概念总是搞不清楚,到底都代表着什么,这里做一个简单的梳理,和大家分享,若有错误请指正,谢谢~ 访问权限修饰符 pu ...

  9. html的header结构和实例

    HTML header结构 <html> <head> <!-- base标签为页面上的所有链接规定默认地址或默认目标. 通常情况下,浏览器会从当前文档的 URL 中提取 ...

  10. python获取公网ip,本地ip及所在国家城市等相关信息收藏

    python获取公网ip的几种方式       from urllib2 import urlopen   my_ip = urlopen('http://ip.42.pl/raw').read() ...