Linux的shell scripts
一.什么是脚本(scripts)
安装一定逻辑关系记录的命令文件,在此文件有可执行权限的情况下可以用文件名称发起脚本内记录命令的执行,shell脚本是一种解释性语言,文件内记录的动作需要解释器shell。
BASH = GNU Bourne-Again Shell,BASH 是 GNU 组织开发和推广的一个项目。Bash脚本类似批处理,简单来讲就是把许多的指令集合在一起,并提供循环、条件、判断等重要功能,语法简单实用,用以编写程序,大大简化管理员的操作,并可以完成图形工具所无法实现的功能。
二.如何建立一个shell脚本
1.vim test.sh
一般情况下脚本的结尾为“.sh”,这不是系统规定的,但是是一种业界规范
2.#!/bin/bash
脚本头的写法,这是脚本使用的解释器,也就是默认脚本运行时开启的子shell
3.脚本内容是用命令和命令执行的逻辑关系组成
4.使文件可执行(使用chmod +x scripts)
三.编写脚本的规范
1.脚本中应添加脚本的说明信息
Author :an 名字
Email :an@westos.com 联系方式
Create_Date :2017-08-21 编辑日期
Vesion :1.0 版本
Description :test scripts 描述
编辑脚本说明配置文件
在vimrc文件最下面添加以下内容
设定快捷键F4
设定函数内容
编辑完整后,打开vim,按下
2.脚本中尽量不要使用中文,哪怕用拼音代理,中文与英文系统解码不一样
3.脚本中出现的() | [ ] | < > 等等成对出现的符号要一次打出,并且内容中的字符与这些符号要有空格
4.脚本中的语句要一次写完在丰富内容,可以先写语句结构在写内容
5.语句中使用的动作要缩进写入,使脚本易读
四.Shell变量
1.变量的作用
shell变量用于为稍后在脚本中使用的名称指定值,并且仅限于shell命令行或从中声明变量的脚本。
2.变量的命名规则
首字母不能是数字,变量中只能包含字母、数字和“_(下划线)”
例如:TEST 、TEST_REDHAT 、Test_Redhat 、tesTRedhat
可根据自己喜好命名
3.变量设定的方式
(1)环境级
在当前环境生效,当前环境关闭(),变量失效
如要永久生效,需要声明 export A=1
(2)用户级
针对配置过的用户生效,其他用户无法使用
如要永久生效,需要修改配置文件
vim /root/.bash_profile ,添加export A=1
添加完成后 source /root/.bash_profile 重新加载配置文件
(3)系统级
别名的设定
alias xie='vim'
vim ~/.bashrc
alias xie='vim'
别名的删除
删除配置 /etc/bashrc文件中的 alias xie='vim'
删除xie别名 unalias xie
4.变量定义方式
user=root
使用位置参数来读取传递给脚本的命令行参数或选项输入。各种特殊变量存储传递的选项编号
Bash解析的个别参数或整个原始命令行。
指定的位置参数总数:$#
位置参数自身:$0、$1、$2、$3....
所有位置参数: $@、$*
编写脚本test.sh
测试
五.字符串比较运算符:=、!=
数字比较运算符:-eq(equal)、-ne(not equal)、-lt(less than)、-le(less or equal)、-gt(greater than)、-ge(greater or equal)
-a 同时 -o 或者
六.文件状态运算符:test -{b|c|e|f|d|r|w|x|s|L} FILE/DIRECTORY
-b 块设备
-c 字符
-e 存在
-f exist and regular
-d 目录
-r regular
-L 链接
-n 变量值
-x x权限
-z 空
七.shell脚本中echo显示内容带颜色显示,echo显示带颜色
需要使用参数-e
格式如下:
echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"
例如:
echo -e "\033[41;36m Please Input a ipaddress \033[0m"
其中41的位置代表底色, 36的位置是代表字的颜色
注:
1、字背景颜色和文字颜色之间是英文的""
2、文字颜色后面有个m
3、字符串前后可以没有空格,如果有的话,输出也是同样有空格
下面是相应的字和背景颜色,可以自己来尝试找出不同颜色搭配
例
echo -e “\033[31m 红色字 \033[0m”
echo -e “\033[34m 黄色字 \033[0m”
echo -e “\033[41;33m 红底黄字 \033[0m”
echo -e “\033[41;37m 红底白字 \033[0m”
字颜色:30—–37
echo -e “\033[30m 黑色字 \033[0m”
echo -e “\033[31m 红色字 \033[0m”
echo -e “\033[32m 绿色字 \033[0m”
echo -e “\033[33m 黄色字 \033[0m”
echo -e “\033[34m 蓝色字 \033[0m”
echo -e “\033[35m 紫色字 \033[0m”
echo -e “\033[36m 天蓝字 \033[0m”
echo -e “\033[37m 白色字 \033[0m”
字背景颜色范围:40—–47
echo -e “\033[40;37m 黑底白字 \033[0m”
echo -e “\033[41;37m 红底白字 \033[0m”
echo -e “\033[42;37m 绿底白字 \033[0m”
echo -e “\033[43;37m 黄底白字 \033[0m”
echo -e “\033[44;37m 蓝底白字 \033[0m”
echo -e “\033[45;37m 紫底白字 \033[0m”
echo -e “\033[46;37m 天蓝底白字 \033[0m”
echo -e “\033[47;30m 白底黑字 \033[0m”
最后面控制选项说明
\33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
\33[7m 反显
\33[8m 消隐
\33[30m — \33[37m 设置前景色
\33[40m — \33[47m 设置背景色
\33[nA 光标上移n行
\33[nB 光标下移n行
\33[nC 光标右移n行
\33[nD 光标左移n行
\33[y;xH设置光标位置
\33[2J 清屏
\33[K 清除从光标到行尾的内容
\33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显示光标
例:
让字体变为红色并且不停的闪烁
#echo -e "\033[31m \033[05m Please Input a ipaddress \033[0m"
字背景颜色范围:40 - 49
40:黑
41:深红
42:绿
43:黄色
44:蓝色
45:紫色
46:深绿
47:白色
字颜色:30 - 39
30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色
八.特殊符号转译和注释
\ 转译但个字符
'' 强引用
"" 弱引用 其转译功能不能转译"!" "$" "\" "`"
九.变量的声明
a=1
$ab = 空
${a}b = 1b
十.四则运算
1.运算法则
++ i++ i=i+1
-- i-- i=i-1
+= j+=i j=j+i
-= j-=i j=j-1
+
-
*
/
**
%
2.运算明令
$[ 3 + 2 ]
let A=3+2
expr 3+2
十一.脚本中的常用语句
1.for语句
for
do
done
2.while语句
同if检查命令或列表的退出值然后寻找匹配项执行
while
do
done
3.if语句
if命令检查if后面的命令或列表的退出值。如果第一个命令评估为true/零,则运行then
之后的命令列表,直至任一else。如果第一个命令评估为false/非零,则运行else与fi之
间的命令列表(反向平写if,标记if块的结束)。
if
then
elif
then
else
fi
4.case语句
case语句 :它能够把变量的内容与多个模板进行匹配,再根据成功匹配的模板去决定应该执行哪
部分代码。
5.expect自动应答脚本
在shell中利用expect实现自动应答脚本。
#!/usr/bin/expect
这一行告诉操作系统脚本里的代码使用那一个shell来执行。
set timeout 3
设置后面所有的expect命令的等待响应的超时时间,单位为秒。
spawn talk
spawn是expect的内部命令,作用是给后面的shell指令加个壳,用来传递交互指令。
expect "who"
判断上次输出结果里是否包含“who”的字符串,如果有则立即返回,否则等待超时时间后返回。
send "westos\n"
执行交互动作,相当于手工输入"westos"。
expect eof
作用是在输出中搜索文件结束符,如果没有这一行,脚本会立即退出,得不到正确结果。
interact
执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。否则退出登录。
$argv 参数数组
expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第
一个,第二个,第三个....参数。
安装expext自动回答软件 yum install expect -y
(1)在/mnt(目录任意)下配置交互输入脚本vim ask.sh问题文件
(2)运行ask文件,手动输入每条信息
(3)在/mnt下配置expect自动应答脚本vim /mnt/anser.exp
下面为expect脚本从bash传递过来的参数
(4)执行自动应答脚本,在后面输入问题的答案,完成自动生成的回答内容
本文转自一百个小排 51CTO博客,原文链接:http://blog.51cto.com/anfishr/1958177,如需转载请自行联系原作者
Linux的shell scripts相关推荐
- Linux的shell scripts的shell脚本练习
1.查找当前交互式的用户 2.红色字体红色背景显示从1到10计时 3.查询IP是否连通 4.带交互式,带提示的查询IP是否连通 5.显示主机有几块网卡,每块网卡的IP是多少 6.10秒带红色字体红色背 ...
- 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)...
第10章 vim程序编辑器 可以将vim看做vi的进阶版本,vim可以用颜色或底线等方式来显示出一些特殊的信息. 为何要学习vim?因为: a. 所有的 Unix Like 系统都会内建 vi 文书编 ...
- [读书笔记]鸟哥的LINUX私房菜 十三章 shell scripts
shell scripts语法 #!/bin/bash 规定使用bash语法解释scripts #Program: 表明程序开始 主程序部分 exit 0 表明程序结束 #用sh执行脚本会新开一个子进 ...
- linux 自动启动shell 和 init概述
1.linux运行级别 linux启动之后会在一个级别运行,下面列出了这些运行级别: 0 系统停止 1 单用户系统,不需要登陆 2 多用户系统但不支持NFS,命令行模式登陆 3 完整多用户模式,命令行 ...
- Linux下Shell脚本实战之监测磁盘空间
Linux下Shell脚本实战之监测磁盘空间 一.脚本目的及要求 二.脚本内容 三.运行脚本 一.脚本目的及要求 (1) 监控/home下每各个用户目录的占用磁盘大小 (2) 监控/var/log下前 ...
- Linux下shell脚本之双色球摇号脚本
Linux下shell脚本之双色球摇号脚本 一.脚本要求 二.脚本内容 三.运行脚本 一.脚本要求 二.脚本内容 三.运行脚本 一.脚本要求 1.编写脚本Lottery.sh,模拟摇号过程 2.6位数 ...
- Linux下shell脚本实战之批量新建用户
Linux下shell脚本实战之批量新建用户 一.脚本要求 二.脚本内容 三.运行脚本 一.脚本要求 二.脚本内容 三.运行脚本 一.脚本要求 1.使用提供的user.txt用户列表 2.批量新建us ...
- Linux的shell脚本实战之检查主机IP是否存在
Linux的shell脚本实战之检查主机IP是否存在 一.目的及要求 二.脚本内容 二.运行结果 一.目的及要求 二.脚本内容 二.运行结果 一.目的及要求 检查 192.168.200.130~14 ...
- Linux的shell脚本函数教程
Linux的shell脚本函数教程 一.shell介绍 二.shell函数的介绍 三.函数的定义 四.shell中函数使用示例 一.shell介绍 二.shell函数的介绍 三.函数的定义 四.she ...
最新文章
- 2010 年 360 盗取用户密码事件始末
- Redhat5.4 系统上部署 MooseFS分布式文件系统的部署
- 成功解决read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and wil
- [java]常用类型转化
- Windows 10 版本信息
- 【iOS开发每日小笔记(二)】gitHub上的开源“瀑布流”使用心得
- 阿里P8架构师谈:什么是缓存雪崩?服务器雪崩的场景与解决方案
- 【Python】SyntaxError: Non-UTF-8 code starting with ‘\xe5‘ in file XXX.py on line XX 的解决方法
- python字符串对比两项_Python之字符串比较is、==、__cmp__
- 使用javascript实现两个listbox中list的移动
- mapreduce分组统计_mongodb中使用mapreduce进行分组统计
- vaadin ---用maven创建vaadin 的工程
- Linux meson + ninja编译安装源码(八)
- UGUI的Drag实现鼠标拖拽
- 开发用到的小功能、功能、网站等
- 使用whistle代理
- web工时记录管理工具开发(一)
- Eclipse设置项目编码格式的两种方式
- 推荐系统实践(五)----基于图的推荐算法
- 【uniapp】 读取手机通讯录权限
热门文章
- java invoker_Spring的HTTPInvoker
- 脑机接口主流算法解析课程视频汇总
- Unity中实现Hololens的三维空间映射Spatial mapping
- 树莓派获4500万美元融资,估值已达5亿美元,去年创下了710万台销量纪录
- 能打造新型CPU的有机分子元件登Nature,用if语句攒出决策树,一个顶数千晶体管...
- 是时候给2020年做个总结了
- 穿上这件全球首款「隐形衣」,做这条街最「无脸」的仔;阿里给钱给资源,求解AI安全难题...
- NLP中文面试学习资料:面向算法面试,理论代码俱全,登上GitHub趋势榜
- 机器“血液”登上Nature:一条假鱼靠它续航36小时,无需固态电池
- 单用户模式迁移home家目录