音视频系列--Shell脚本编程入门

说句题外话,19年互联网整体环境不太好,裁员挺严重的,现在真的能有一个稳定的工作已经算是可以了,前些年的互联网热潮已经过去了,再也不是那种会四大组件就可以随便进入一家公司的年代了,现在找工作不仅要会使用某个东西,而要知道里面的实现原理,需要有一个比较强的技术实力,才能找到一份符合自己愿望的公司。所以程序员就是要时刻保持一个学习的心态,对于除了自己工作中用到东西,更需要对工作之外的东西学习,学到老,活到老,拥有别人所没有的东西,才能在竞争中脱颖而出。延迟享受,先苦后甜。

一直在为音视频的学习打基础,这几天看了下shell的脚本编程,为后面的ffmpeg库编译做准备,下面就来学习下shell,看下怎么使用。

Shell是一个用 C 语言编写的程序,它是一门解释型编程语言,它是用户使用 Linux 的桥梁,我们后面说的是shell脚本编程(shell Script),是一种shell脚本程序,而不是编写shell本身,shell 和 shell script 是两个不同的概念,后面说的shell是指shell脚本。

准备阶段


要学习shell,首先需要准备一个linux环境,可以自己装一个虚拟机,ubuntu和centos都可以,也可以自己去买一个服务器,这个比较方便,然后用xshell连接远程服务器,也可以在浏览器中直接使用。

第一个列子


linux环境准备好了,就可以编写shell了,先上第一个例子

#!/bin/bash  #1
#第一个入门shell脚本 #2
echo "这是第一个例子" #3

这是一个非常简单的shell了,就是打印一句话。但是还是来介绍下它的基本格式,首先#1处#!表示shell用的解释器,常用的主要有两种,第一个是/bin/bash,第二个是/bin/sh,shell脚本第一行都是来声明使用到的解释器,#2处是一个注释功能,shell的注释使用#,#3处echo表示字符串的格式输出。

写完就可以运行了,shell执行方式有三种:

  • 1 、 /bin/bash 脚本.sh 这是最标准的写法
  • 2 、./脚本.sh 这种执行方式需要授权
  • 3、 sh 脚本.sh 这是一种简介的执行方式

第二个例子 外部传参


有时候为了灵活控制,参数需要从外部获取,这时候来看下怎么做吧

#!bin/bash
echo "AAAAAAA"

age=99 # 定义局部变量
echo age: $age  #使用局部变量
echo PWD: $PW  # 使用系统命令,需要大写
#-----------
echo 当前shell脚本名称是:$0  #获取当前shell名称
echo 参数一:$1 #获取从外部传入的第一个参数
echo 参数二:$2 #获取从外部传入的第二个参数
#-----------
echo "是否执行成功:this\$? is $?"  #上一个命令是否执行成功
echo "外界传递来了多少参数:this\* is $*" #外部传入了多少参数
echo "外界传递参数的数量:this\# is $#" #外部传入了多少个参数

上面这个例子中用到知识还是挺多的,其一,有局部变量的定义,怎样打印局部变量,已经打印系统命令的执行结果。其二,获取当前shell名称,从外界获取传入的参数。其三,判断上一个shell是否执行成功,传入了多少参数,数量。

执行命令时候外面加上参数就可以了比如sh test02.sh 888 999

在shell中定义变量不要加空格,不然会识别不到,但是命令使用要加空格,后面会说到

第三个例子 for循环


完成了上面的基础学习,下面就开始学习使用for循环

首先来看下怎么使用for循环打印

#!/bin/bash
  
#使用 `seq 1 20`作为我们的数据源,然后遍历这个数据源

for i in `seq 1 20`
do
        echo "循环遍历的数字是:$i"
done

这个例子使用到了一个系统命令seq,用于生成从一个数到另一个数的所有整数,然后用i接收,在循环中打印

在shell中执行系统命令需要加``,并且for循环中不能使用括号,用$i来打印i接收的指

接下来看一个累加的功能

#!bin/bash
  
#做累加的操作
a=0
for((f=0;f<100;f++))
do
        #注意:累加的时候,需要加空格,不然会有问题
        a=`expr $f + $a` # $((100+100))和`expr 100 + 100`是一样的效果,只不过后者全兼容
done
echo "最后累加1~100的值是:$a"

这个例子用到一个expr系统命令,可以实现数值运算、数值或字符串比较、字符串匹配、字符串提取、字符串长度计算等功能。它还具有几个特殊功能,判断变量或参数是否为整数、是否为空、是否为0等。

for循环需要加双括号来完成计算功能,并且计算时候 + 号之间需要加空格,这就是前面提到的命令要有空格。

第四个例子 while循环


继续来学习循环while

#!/bin/bash

#while循环的演示
i=0
while((i<100))
do
	echo "i的值是:$i"
	i=`expr $i + 1`
	echo "循环遍历的值 数字是:$i"
done	

在这个例子中也要使用双括号,来做条件判断

也可以参考上个例子来做累加功能。

第五个例子 while循环读文件


接着就来看下使用while循环来读文件

#!/bin/bash

#读取文件内容

echo $`pwd`

while read lineVarAA
do
	echo $lineVarAA
done<`pwd`/file01.txt  # $PWD和` pwd `效果是一样的

这个例子是用来读取当前目录下的file01.txt文件,最后一行代表待读取文件,这个是按行读取,读取的内容会放在lineVarAA变量中,然后打印出来

第六个例子 if语句学习


#!/bin/bash

#if语句:
#if(())代表算术运算符, if[   ]代表执行指令,注意:在指令旁边要加空格,列如: if[ ! -d  ]

NUM1=100
NUM2=200

if(($NUM1>$NUM2));then
	echo "num1>num2"
elif(($NUM1==$NUM2));then
	echo "num1=num2"
else
	echo "num1<num2"
fi	

这个例子中有多个条件的判读,也需要加双括号,需要使用的时候,直接参考着写就可以了

then代表条件触发的点,前面要加分号,写在单独一行可以不加,fi代表结束判断

第七个例子 if深入


学习了if的基础使用,就来看下if的深入用法,判断目录是否存在,不存在,就创建目录

#!bin/bash

#判断目录是否存在,如果存在就提示已经存在,如果不存在,就创建此文件夹
if [ ! -d `pwd`/testdir ]; then
	mkdir -p `pwd`/testdir
else
	echo "kevintetdir目录已经存在了"
fi

如果当前目录不存在,就创建目录,否则就提示已经存在

如果是命令的执行使用的是中括号[ ],并且要注意空格的存在

第八个例子 if判断


接下来学习if来判断是否相等和是否为空

#!bin/bash

# 判断字符串是否相等

var1="abcd"
var2="ad"

if [ $var1 ]; then
	echo "var1不为空"
else
	echo "var1为空"
fi	

echo "-------------------------"

if [ $var1 = $var2 ]; then
	echo "var1等于var2"
else
	echo "var1不等于var2"
fi	

比较简单就没有过多可以说明了,具体看代码

第九个例子 函数


接下来就看进阶用法,函数的使用

#!/bin/bash

#函数的学习

function test01(){
	echo "这是一个函数"
}

test01

#局部变量的使用
function test02(){
	var1="ruby1"
	var2="ruby2"
	echo $var1
	echo $var2
}
test02

#传递参数给函数
function test03(){
	echo "参数值1是:`expr $1`"
	echo "参数值2是:`expr $2`"
	echo $1
	echo $2
}
test03 "呵呵" "哈哈"

shell中使用函数使用function关键字定义,使用函数,比如使用test01,后面直接用名字调用就可以了,如果要传参,后面直接接上函数的参数,比如test03就可以了。

第十个例子 重定向


重定向列表

在这里插入图片描述

输出重定向

重定向一般通过在命令间插入特定的符号来实现。特别的,这些符号的语法如下所示:

command1 > file1

上面这个命令执行command1然后将输出的内容存入file1。
注意任何file1内的已经存在的内容将被新内容替代。
如果要将新内容添加在文件末尾,请使用>>操作符。

实例:

who > file01.txt

将who输出的内容重定向的file01.txt文件中了,可以使用cat命名查看

输入重定向

和输出重定向一样,Unix 命令也可以从文件获取输入,语法为:

command1 < file1

这样,本来需要从键盘获取输入的命令会转移到文件读取内容。
注意:输出重定向是大于号(>),输入重定向是小于号(<)。

实例:

cat 0< file01.txt

上面这个命令执行完之后,会将file01.txt文件中的内容重定向到屏幕上(unix屏幕表示0),也就是会输出file01.txt文件中的内容

常用命令


举几个常用的linux命令,方便复习使用

echo $? 查询上一个命令是否执行成功,127执行错误,0成功

df -h 查询磁盘使用量

pwd查询当前路径详情

$0当前脚本名称

$1从外部传参1

$2从外部传参2,后面内推

$*外界传递了多少参数

$# 外界传递参数的数量

seq 1 20 相当于for循环打印1-20

mv文件重命名

sz 文件导出

rz 文件导入

rm -rf 删除文件

shell入门之后就会去编译ffmpeg库,后续继续总结

参考


1.Shell 教程

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值