一篇文章学懂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就是类的字节码,就是一个普通的类,里面保存的是类的信息, ...
随机推荐
- Java生产1-100的随机数
直接调用Math里面的random即可,简单方便int i = (int)(Math.random()*100+1);
- spring boot --- 初级体验
Spring boot的介绍我就不多说了,网上可以自己看一下. 它的优点就是:快!适合小白,没有复杂的配置文件. 缺点也很明显:坑有些多, 文档略少,报错有时不知道该如何处理. 下面做个最简单的入门: ...
- Centos7.0下将Python更新到Python2.7.13
在云服务器下默认安装的python版本过低,所有我们要手动进行更新(不建议卸载老的版本,然后安装新的,这样会导致大量的异常错误) 为了防止在安装编译python时出错,需先更新gcc :yum - ...
- 《Android进阶》之第一篇 在Java中调用C库函数
在Java代码中通过JNI调用C函数的步骤如下: 第一步:编写Java代码 class HelloJNI{ native void printHello(); native void printStr ...
- Opencv在linux下安装
Opencv in Linux These steps have been tested for Ubuntu 10.04 but should work with other distros as ...
- Java解析word文档
背景 在互联网教育行业,做内容相关的项目经常碰到的一个问题就是如何解析word文档. 因为系统如果无法智能的解析word,那么就只能通过其他方式手动录入word内容,效率低下,而且人工成本和录入出错率 ...
- 编写原生的Node.js模块
导语:当Javascript的性能遭遇瓶颈,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...
- 玩转Storage Table 的PartitionKey,RowKey设计
参阅的文章 l https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/designing-a-scalable ...
- php 二级级联菜单
找了很多个级联的菜单,都不好用,自己弄个简单点的,共享下,希望有朋友用得着 <?php //建立表country,有三个字段Id,parentId,area. $pro = $_POST['pr ...
- python 第五弹
*:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...


