一篇文章学懂Shell脚本
Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。
Shell可以直接使用在win/Unix/Linux上面,并且可以调用大量系统内部的功能来解释执行程序,如果熟练掌握Shell脚本,可以让我们操作计算机变得更加轻松,也会节省很多时间。
Shell应用场景
Shell能做什么
- 将一些复杂的命令简单化(平时我们提交一次github代码可能需要很多步骤,但是可以用Shell简化成一步)
- 可以写一些脚本自动实现一个工程中自动更换最新的sdk(库)
- 自动打包、编译、发布等功能
- 清理磁盘中空文件夹
- 总之一切有规律的活脚本都可以尝试一下
Shell不能做什么
- 需要精密的运算的时候
- 需要语言效率很高的时候
- 需要一些网络操作的时候
- 总之Shell就是可以快速开发一个脚本简化开发流程,并不可以用来替代高级语言
Shell的工作原理
Shell可以被称作是脚本语言,因为它本身是不需要编译的,而是通过解释器解释之后再编译执行,和传统语言相比多了解释的过程所以效率会略差于传统的直接编译的语言。
最简单的脚本:
#!/bin/bash
echo "Hello World"
只需要打开文本编辑工具,编辑成以上的样子,然后保存成test.sh
运行该脚本:
. cd 到该目录下
. chmod +x ./test.sh #给脚本权限
. ./test.sh #执行脚本

这样我们便写出来了第一个最简单的脚本,下面我们可以尝试着写一些复杂的脚本。
Shell中的变量
myText="hello world"
muNum=
这里面需要注意的就是,“=”前后不能有空格,命名规则就和其它语言一样了。
访问变量
myText="hello world"
muNum=
echo $myText
echo muNum
当想要访问变量的时候,需要使用$,否则输出的将是纯文本内容,如下图所示。
Shell中的四则运算
例子程序
#!/bin/bash
echo "Hello World !"
a=
b=
val=`expr $a + $b`
echo "Total value : $val" val=`expr $a - $b`
echo "Total value : $val" val=`expr $a \* $b`
echo "Total value : $val" val=`expr $a / $b`
echo "Total value : $val"
这里面需要注意的就是,定义变量的时候“=”前后是不能有空格的,但是进行四则运算的时候运算符号前后一定要有空格,乘法的时候需要进行转义。
其它运算符 =、==、!=、!、-o、-a

例子程序
a=
b=
val=`expr $a / $b`
echo "Total value : $val" val=`expr $a % $b`
echo "Total value : $val" if [ $a == $b ]
then
echo "a is equal to b"
fi
if [ $a != $b ]
then
echo "a is not equal to b"
fi
关系运算符
#!/bin/sh例子程序
a=
b=
if [ $a -eq $b ]
then
echo "true"
else
echo "false"
fi if [ $a -ne $b ]
then
echo "true"
else
echo "false"
fi if [ $a -gt $b ]
then
echo "true"
else
echo "false"
fi if [ $a -lt $b ]
then
echo "true"
else
echo "false"
fi if [ $a -ge $b ]
then
echo "true"
else
echo "false"
fi if [ $a -le $b ]
then
echo "true"
else
echo "false"
fi
字符串运算符


字符串
#!/bin/sh
mtext="hello" #定义字符串
mtext2="world"
mtext3=$mtext" "$mtext2 #字符串的拼接
echo $mtext3 #输出字符串
echo ${#mtext3} #输出字符串长度
echo ${mtext3::} #截取字符串
数组
#!/bin/sh
array=( ) #定义数组
array2=(aa bb cc dd ee) #定义数组
value=${array[]} #找到某一个下标的数,然后赋值
echo $value #打印
value2=${array2[]} #找到某一个下标的数,然后赋值
echo $value2 #打印
length=${#array[*]} #获取数组长度
echo $length
输出程序
echo
#!/bin/sh
echo "hello world"
echo hello world text="hello world"
echo $text echo -e "hello \nworld" #输出并且换行 echo "hello world" > a.txt #重定向到文件 echo `date` #输出当前系统时间
printf
同c语言,就不过多介绍了
判断语句
- if
- if-else
- if-elseIf
- case
#!/bin/sh
a=
b=
if [ $a == $b ]
then
echo "true"
fi if [ $a == $b ]
then
echo "true"
else
echo "false"
fi if [ $a == $b ]
then
echo "a is equal to b"
elif [ $a -gt $b ]
then
echo "a is greater than b"
elif [ $a -lt $b ]
then
echo "a is less than b"
else
echo "None of the condition met"
fi

test命令
test $[num1] -eq $[num2] #判断两个变量是否相等
test num1=num2 #判断两个数字是否相等

for循环
#!/bin/sh
for i in {..}
do
echo $i
done
for i in
do
echo $i
done
for FILE in $HOME/.bash*
do
echo $FILE
done

while循环
#!/bin/sh
COUNTER=
while [ $COUNTER -lt ]
do
COUNTER=`expr $COUNTER + `
echo $COUNTER
done echo '请输入。。。'
echo 'ctrl + d 即可停止该程序'
while read FILM
do
echo "Yeah! great film the $FILM"
done
以上是while循环的两种用法,第一种是比较常规的,执行循环,然后每次都把控制的数加1,就可以让while循环有退出的条件了。
第二种是用户从键盘数据,然后把用户输入的文字输出出来。
跳出循环
break #跳出所有循环
break n #跳出第n层f循环
continue #跳出当前循环
函数
#!/bin/sh
sysout(){
echo "hello world"
}
sysout
定义一个没有返回值的函数,然后调用该函数
#!/bin/sh
test(){
aNum=
anotherNum=
return $(($aNum+$anotherNum))
}
test
result=$?
echo $result
定义一个有返回值的函数,调用该函数,输出结果
#!/bin/sh
test(){
echo $ #接收第一个参数
echo $ #接收第二个参数
echo $ #接收第三个参数
echo $# #接收到参数的个数
echo $* #接收到的所有参数
}
test aa bb cc
定义了一个需要传递参数的函数
重定向
$echo result > file #将结果写入文件,结果不会在控制台展示,而是在文件中,覆盖写
$echo result >> file #将结果写入文件,结果不会在控制台展示,而是在文件中,追加写
echo input < file #获取输入流
写一个自动输入命令的脚本
自动提交github仓库的脚本
#!/bin/bash
echo "-------Begin-------"
git add .
git commit -m $
echo $
git push origin master
echo "--------End--------"
以上便是我对shell知识的总结,欢迎大家点心,评论,一起讨论~~
一篇文章学懂Shell脚本的更多相关文章
- 一篇文章学懂Shell脚本,最简明的教程在这里
Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. Shell可以直接使用在win/Unix/Linux上面 ...
- 一篇文章让你快速入门 学懂Shell脚本
Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. Shell可以直接使用在win/Unix/Linux上面 ...
- 一篇文章看懂JS闭包,都要2020年了,你怎么能还不懂闭包?
壹 ❀ 引 我觉得每一位JavaScript工作者都无法避免与闭包打交道,就算在实际开发中不使用但面试中被问及也是常态了.就我而言对于闭包的理解仅止步于一些概念,看到相关代码我知道这是个闭包,但闭包 ...
- 第1章:认识Shell脚本
第一章:认识Shell脚本 1.1.什么是Shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行. 实际上Shell是一个命令解释器 ...
- 一篇文章搞懂高级程序员、架构师、技术总监、CTO从薪资到技能的区别
一篇文章搞懂高级程序员.架构师.技术总监.CTO从薪资到技能的区别 http://youzhixueyuan.com/senior-programmers-architects-technical-d ...
- 一篇文章看懂angularjs component组件
壹 ❀ 引 我在 angularjs 一篇文章看懂自定义指令directive 一文中详细介绍了directive基本用法与完整属性介绍.directive是个很神奇的存在,你可以不设置templa ...
- angularjs 一篇文章看懂自定义指令directive
壹 ❀ 引 在angularjs开发中,指令的使用是无处无在的,我们习惯使用指令来拓展HTML:那么如何理解指令呢,你可以把它理解成在DOM元素上运行的函数,它可以帮助我们拓展DOM元素的功能.比如 ...
- 一篇文章看懂spark 1.3+各版本特性
Spark 1.6.x的新特性Spark-1.6是Spark-2.0之前的最后一个版本.主要是三个大方面的改进:性能提升,新的 Dataset API 和数据科学功能的扩展.这是社区开发非常重要的一个 ...
- 一篇文章弄懂 Java 反射的使用
说到Java反射,必须先把 Java 的字节码搞明白了,也就是 Class , 大 Class 在之前的文章中,我们知道了Java的大Class就是类的字节码,就是一个普通的类,里面保存的是类的信息, ...
随机推荐
- List的多维度排序案例演示~
文章也已同步到我的csdn:http://blog.csdn.net/u012881584/article/details/72377510 关于List的多维度排序. 日常工作中有很多关于list的 ...
- TDE: Transparent Data Encryption brief introduction
1. What is TDE? Briefly speaking, TDE is used to encrypted data. 2. The benifits: Belows are come fr ...
- 使用javascript生成当前博文地址的二维码图片
前面的话 在电脑端发现一篇好的博文,想在手机上访问.这时,就必须打开手机浏览器输入长长的URL地址才行,非常不方便.如果在博客标题的后面跟一张小的图片,点击该图片后,出现一张二维码的大图,然后再通过手 ...
- VR全景加盟-全景智慧城市携万千创业者决战BAT
在所谓互联网思维走到末路.可穿戴设备基本昙花一现的大环境下,很多互联网人员转战VR市场,自然喜欢用互联网思维来考虑.笔者认识一些投资界人士,在谈到投资时,他们经常就问以下几句话:2B还是2C?将来有多 ...
- STM32的RFID射频读写控制装置
,大二上学期做的,过了很久,先上一下图: 这并不是做个最后一版:主体是RC552+STM32+1062:蜂鸣器,继电器,LED等:反正最后的效果就是,刷一下卡,1602显示一下持卡人(需要提前注册,注 ...
- 谈一谈Java8的函数式编程 (三) --几道关于流的练习题
为什么要有练习题? 所谓学而不思则罔,思而不学则殆,在系列第一篇就表明我认为写博客,既是分享,也是自己的巩固,我深信"纸上得来终觉浅,绝知此事要躬行"的道理,因此之后的几篇博 ...
- 2017-5-22 ASP六大 内置对象
ASP内置对象:提供内建对象,这些对象使用户更容易收集通过浏览器请 求发送的信息.响应浏览器以及存储用户信息(如用户首选项). 1.Request --- 获取请求对象 获取通过地址栏传值过来的对象 ...
- fidder从基础到熟练
一.fidder介绍 1.Fiddler是一款由C#语言开发的免费http调试代理软件,有.net 2 和 .net 4 两种版本.Fiddler能够记录所有的你电脑和互联网之间的http通讯,Fid ...
- 这是假的JS——利用CSS Animation实现banner图非交互循环播放
话不多说,先来张html和css代码截图~ 注意事项: 1.如果想在每张图前进行停顿,可以在keyframes中的每一步前加上一小段与下一张相同的代码: 2.如果想要在实现无违和感的最后一张与第一张的 ...
- Vue单页式应用(Hash模式下)实现微信分享
前端微信分享的基本步骤: 一.绑定域名: 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名".这个不多说,微信开发 ...


