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 #执行脚本

效果图1

这样我们便写出来了第一个最简单的脚本,下面我们可以尝试着写一些复杂的脚本。


Shell中的变量

myText="hello world"
muNum=

这里面需要注意的就是,“=”前后不能有空格,命名规则就和其它语言一样了。

访问变量

myText="hello world"
muNum=
echo $myText
echo muNum

当想要访问变量的时候,需要使用$,否则输出的将是纯文本内容,如下图所示。

效果图2

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"

这里面需要注意的就是,定义变量的时候“=”前后是不能有空格的,但是进行四则运算的时候运算符号前后一定要有空格,乘法的时候需要进行转义。

效果图3.png

其它运算符 =、==、!=、!、-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

效果图4

关系运算符

#!/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

效果图5

字符串运算符





字符串

#!/bin/sh
mtext="hello" #定义字符串
mtext2="world"
mtext3=$mtext" "$mtext2 #字符串的拼接
echo $mtext3 #输出字符串
echo ${#mtext3} #输出字符串长度
echo ${mtext3::} #截取字符串

效果图6

数组

#!/bin/sh
array=( ) #定义数组
array2=(aa bb cc dd ee) #定义数组
value=${array[]} #找到某一个下标的数,然后赋值
echo $value #打印
value2=${array2[]} #找到某一个下标的数,然后赋值
echo $value2 #打印
length=${#array[*]} #获取数组长度
echo $length

效果图7

输出程序

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` #输出当前系统时间

效果图8

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

效果图9

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

效果10

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

定义一个有返回值的函数,调用该函数,输出结果

效果图11
#!/bin/sh

test(){
echo $ #接收第一个参数
echo $ #接收第二个参数
echo $ #接收第三个参数
echo $# #接收到参数的个数
echo $* #接收到的所有参数
} test aa bb cc

定义了一个需要传递参数的函数

效果图12

重定向

$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--------"

效果图13

以上便是我对shell知识的总结,欢迎大家点心,评论,一起讨论~~

一篇文章学懂Shell脚本的更多相关文章

  1. 一篇文章学懂Shell脚本,最简明的教程在这里

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. Shell可以直接使用在win/Unix/Linux上面 ...

  2. 一篇文章让你快速入门 学懂Shell脚本

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. Shell可以直接使用在win/Unix/Linux上面 ...

  3. 一篇文章看懂JS闭包,都要2020年了,你怎么能还不懂闭包?

     壹 ❀ 引 我觉得每一位JavaScript工作者都无法避免与闭包打交道,就算在实际开发中不使用但面试中被问及也是常态了.就我而言对于闭包的理解仅止步于一些概念,看到相关代码我知道这是个闭包,但闭包 ...

  4. 第1章:认识Shell脚本

     第一章:认识Shell脚本 1.1.什么是Shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行. 实际上Shell是一个命令解释器 ...

  5. 一篇文章搞懂高级程序员、架构师、技术总监、CTO从薪资到技能的区别

    一篇文章搞懂高级程序员.架构师.技术总监.CTO从薪资到技能的区别 http://youzhixueyuan.com/senior-programmers-architects-technical-d ...

  6. 一篇文章看懂angularjs component组件

     壹 ❀ 引 我在 angularjs 一篇文章看懂自定义指令directive 一文中详细介绍了directive基本用法与完整属性介绍.directive是个很神奇的存在,你可以不设置templa ...

  7. angularjs 一篇文章看懂自定义指令directive

     壹 ❀ 引 在angularjs开发中,指令的使用是无处无在的,我们习惯使用指令来拓展HTML:那么如何理解指令呢,你可以把它理解成在DOM元素上运行的函数,它可以帮助我们拓展DOM元素的功能.比如 ...

  8. 一篇文章看懂spark 1.3+各版本特性

    Spark 1.6.x的新特性Spark-1.6是Spark-2.0之前的最后一个版本.主要是三个大方面的改进:性能提升,新的 Dataset API 和数据科学功能的扩展.这是社区开发非常重要的一个 ...

  9. 一篇文章弄懂 Java 反射的使用

    说到Java反射,必须先把 Java 的字节码搞明白了,也就是 Class , 大 Class 在之前的文章中,我们知道了Java的大Class就是类的字节码,就是一个普通的类,里面保存的是类的信息, ...

随机推荐

  1. QBC查询

    1.基本语法 session.beginTransaction(); Criteria criteria = session.createCriteria(Person.class); SimpleE ...

  2. WPF 杂谈——自定义控件

    如果只是使用现有的WPF控件的话,是很难满足当前社会多复杂的业务.所以用户自己订制一系列控件也是一种不可避免的情势.WPF在控制方面分为俩种:用户控件和自定义控件.相信看过前面章节的就明白他们俩者之间 ...

  3. WINFORM实现进程信息的查看,listview,点击,右键,右键菜单

    1.   程序设计要求 设计程序来获取计算机中的进程信息 2.程序设计流程图 3.程序设计亮点 (0)程序启动时加载guide引导使用视频 (1)使用Listview控件显示出所有控件的名称. (2) ...

  4. 前端魔法堂:屏蔽Backspace导致页面回退

    前言  前几天用户反映在录入资料时一不小心错按Backspace键,就会直接回退到是一个页面,导致之前辛辛苦苦录入的资料全部丢失了.哦?居然还有这种情况.下面我们来一起探讨一下吧! Windows系统 ...

  5. 开涛spring3(7.4) - 对JDBC的支持 之 7.4 Spring提供的其它帮助

    7.4  Spring提供的其它帮助 7.4.1  SimpleJdbc方式 Spring JDBC抽象框架提供SimpleJdbcInsert和SimpleJdbcCall类,这两个类通过利用JDB ...

  6. Lesser known dplyr tricks

    In this blog post I share some lesser-known (at least I believe they are) tricks that use mainly fun ...

  7. Running R jobs quickly on many machines(转)

    As we demonstrated in “A gentle introduction to parallel computing in R” one of the great things abo ...

  8. 微信小程序 生命周期函数详解

    微信小程序 生命周期函数 小程序中 判断当前首页是从其他页面返回,还是由入口打开 由于小程序的数据在我们退出小程序时并没有得到释放,因此再次点击开来数据依然没有变成初始化 解决方法:在小程序 data ...

  9. python爬虫从入门到放弃(九)之 实例爬取上海高级人民法院网开庭公告数据

    通过前面的文章已经学习了基本的爬虫知识,通过这个例子进行一下练习,毕竟前面文章的知识点只是一个 一个单独的散知识点,需要通过实际的例子进行融合 分析网站 其实爬虫最重要的是前面的分析网站,只有对要爬取 ...

  10. Hadoop的编译

    Hadoop2.4.0  重新编译 64  位本地库 原创作者:大鹏鸟 时间:2014-07-28 环境:虚拟机 VirtualBox,操作系统 64 位 CentOS 6.4 下载重新编译需要的软件 ...