Shell脚本快速入门
最近看了下Shell脚本。曾经遇到很多现成的工具包里边就多次用到了Shell脚本。总之这东西的作用无非就是将一系列的操作进行整合。
·整合后使得一套工作更加模块化规范化。
·批量处理要比手动操作快得多。
Shell脚本虽说是脚本,但是它和一些常规的脚本相比差别还是蛮大的。主要原因是因为shell脚本需要整合命令。
来看一段:
#!/bin/bash path=`pwd` echo $path unset path cd "../../" path=`pwd` echo $path
输出结果:
/home/rockderia/桌面/shells/git/rock_shells /home/rockderia/桌面/shells
上述的代码中看到,可以直接将 cd "../../"诸如此类的命令行语句直接镶嵌在脚本当中。所以就注定shell脚本的解释器要比较奇怪一些。
我们来一点一点了解一些简单的shell语法,不说能写出漂亮的shell,至少再看见.sh的时候不要萌比。
[规范][注释] [变量] [打印] [传参] [输入] [数组] [文件] [重定向] [逻辑控制] [甩锅]
1.规范
一般而言我们使用的shell脚本都是bash shell,脚本文件的扩展名是 .sh , 第一行需要写 #!/bin/bash 。
执行的话,要用诸如 ./xxx.sh 的方式进行
2.注释
以#开头的一行
# 这行是注释
3.变量
变量的声明
声明的时候格式是 变量名=
注意变量名和等号之间不能有空格,此外,变量名前边不要加 $
变量的使用
这里和PHP比较相似比如
name="rockderia" echo $name
变量的类型
一般变量只有两种类型 数字和字符串还有文件 这个一般声明的时候不做区分的,因为他们的运算符都是不一样的,所以解释器会根据使用时用的哪种运算符去还原类型。
4.打印
echo 可以直接用来打印
此外还有一种printf函数打印的方式,那里边就支持占位符之类的格式化操作了。
5.传参
执行脚本的时候可以随意传参 比如
./one.
那么 $1的值就是 "one" $3的值就是10
6.输入
read 可以接受控制台输入数据
read number
7.数组
数组的声明:
array_list=(1,2,3,4,5)
取值
${array_list[1]}
数组的长度
${#arrat_list[*]}
8.文件
直接给一个变量赋值一个文件的地址即可,比如
file="./one.txt"
9.重定向
可以直接将echo的内容重定向给文件变量
echo "into file" > $file
10.逻辑控制
因为shell中针对文件,字符串,和数字是没有类型的概念的,但是你操作的时候根据你的操作解释器会默认这个变量的类型。比如你执行
let "sum=$sum+1"
字符串和文件才不可能执行 + 这样的操作,所以默认就是数字了
又比如
if [ -e $file ]
这时候用到的是文件的逻辑运算符 -e 所以也就默认这个$file变量是文件了。
编写实例:
if逻辑
read number_1
read number_2
if test $number_1=$number_2
then
echo "两个数字是相等的";
else
echo "两个数字不相等";
fi
if test -e ./files/rock.txt
then
echo "文件存在";
else
echo "文件不存在";
fi
循环结构
; temp=; i=; ;i<=;i++)) do let "temp=$i*$i"; let "sum+=$temp"; done echo "the result is "$sum; filearray=`ls ./files/*.txt`; for file in $filearray do echo $file done
11.甩锅
最后祝您......
因为可以把其他的执行语句随意的插入到shell脚本当中,所以我们有的时候也可以拜托高级语言或者其他熟悉的脚本执行一些操作。这正是shell的强大与灵活之处。
比如我们可以写一个c++文件
#include<stdio.h>
typedef char* str;
int main(int argc, char* argv[])
{
str* ];
)
return -;
head++;
; i < argc; i++)
{
printf("%d-",i);
printf(*head);
printf("\n");
head++;
}
}
上述的文件把接受的参数全部打印出来,当然我们可以用c++去执行更多的功能,毕竟参数都已经传递进来了。我们把它编译成可执行文件.out。接下来我们编写shell脚本
#!/bin/bash
param1="home"
param2="my"
./cpp/a.out ${param1} ${param2}
echo "end"
就像这样,我们执行这个shell脚本就会获得如下结果:
-home -my end
博主的测试代码入口:https://github.com/RockDeria/rock_shells.git
Shell脚本快速入门的更多相关文章
- shell脚本快速入门----shell基本语法总结
1.#!脚本的开头 #!/bin/bash 2.脚本属性 添加可执行属性,chmod +x 或使用"."运行,例如运行当前目录下的a.sh 可执行命令 ". ./a.sh ...
- shell脚本快速入门----正则表达式
一. "." 符号 (一个英文句号) 用于匹配换行符之外的任意一个字符 如 root 可用r..t来匹配 二. "*"符号 重复匹配前一个字符 如ab abc ...
- 【转载】MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法
原文地址:MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法 作者:mchdba 某个初级dba误删index,mysql漫山遍野全是10S以上的慢sql,mysql ...
- 08 bash特性--shell脚本编程入门
shell脚本编程入门 编程语言介绍 编程语言分为:机械语言.汇编语言和高级语言: 计算机能识别的语言为机械语言,而人类能学习的并且能够方便掌握的为高级语言,所以,我们所编写的程序就要通过编译来转换成 ...
- shell脚本从入门到精通
阿里云大学 shell脚本从入门到精通 第1 章 : shell脚本编程-变量-算术表达式-判断语句-if分支语句 第2 章 : case-for-While-双括号-循环嵌套-break-conti ...
- shell脚本从入门到精通(初级)之入门篇
写在开头 本文是阅读<Linux命令行与shell脚本编程大全>时的一些笔记,主要是shell脚本的一些基本语法, 还有很多细节和高级内容没有写到. 笔者也是shell script菜鸟, ...
- 利用shell脚本快速定位日志
我们平时查日志,在测试环境,日志文件只有几个的情况下,我们可以通过找时间接近的文件然后根据关键词定位报错位置,大不了都查一遍,这都可以忍受.但是在实际的生产环境下,服务器集群部署,每天的日志非常多非常 ...
- shell脚本从入门到精通(中级)之提高篇
shell 脚本入门到精通(中级) 一.shell 脚本的执行 二.输出格式化 三.数据类型 四.重定向 五.变量 一.shell 脚本的执行 1. 脚本执行的4种方法 $ ls /tmp/test. ...
- shell脚本快速配置yum源
我们在使用Red Hat系列的Linux系统时经常要配置yum源,本文档提出一个快速配置yum源的方法,就是用shell脚本来实现. 我们在使用Red Hat系列的Linux系统时经常要配置yum源, ...
随机推荐
- mysql 主命令总结
mysql 登录和恢复命令 mysqladmin 管理 mysql 命令 mysqldump 备份命令 mysqlbinlog 解析 binlog 命令 source 恢复数据命令
- Mac OS Terminal 几个快捷键
在Mac系统中几个键位组合可以使Terminal的操作更加灵活方便. 1.将光标移动到行首:ctrl + a 2.将光标移动到行尾:ctrl + e 3.清除屏幕: ctrl + ...
- 磁盘IO
基本概念: 在数据库优化和存储规划过程中,总会提到IO的一些重要概念,在这里就详细记录一下,个人认为对这个概念的熟悉程度也决定了对数据库与存储优化的理解程度,以下这些概念并非权威文档,权威程度肯定就不 ...
- python之实现基于paramiko和mysql数据库的堡垒机
一.堡垒机结构 堡垒机执行流程: 管理员为用户在服务器上创建账号(将公钥放置服务器,或者使用用户名密码) 用户登陆堡垒机,输入堡垒机用户名密码,现实当前用户管理的服务器列表 用户选择服务器,并自动登陆 ...
- Cheatsheet: 2016 11.01 ~ 11.30
Web Getting Started With Vapor: A Swift Web Framework Front-end vs Back-end vs Network Performance S ...
- 微信小程序-设备
网络状态: wx.getNetworkType(OBJECT) 获取网络类型. OBJECT参数说明: wx.getNetworkType({ success: function(res) { var ...
- 使用idea15搭建基于maven的springmvc-mybatis框架
我这边使用的是intellij idea15 1.new maven webapp project 2.添加groupId和artifactId 3.选择maven路径和maven仓库路径 最后确定之 ...
- 用jQuery基于原生js封装的轮播
我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...
- ie6、7下 text-indent 问题
text-indent属性 用于文字缩进,更多是用来隐藏文字.比如,一个logo标题,上面的问题很有艺术感,不得不把文字和背景组合成一张背景图(此处页面元素用a表示),但处于SEO方面的考虑,需要把a ...
- PHP中的逻辑运算符的优先级
在三元运算中(expr1)?(expr2):(expr3); and,or,xor的优先级要小于三元运算符,所以需要添加括号例:如果$a为true,$b为fals,$a and $b?"tr ...