为什么要学习shell
ffmpeg 音视频
什么是shell
构建一个大型项目,不断打包,编译,这么一系列的操作,可以使用shell;
学习目标
学习路线
- 变量的定义与使用
- 语法详解
- 方法参数传递机制的详解
- shell脚本编写与ffmpeg的编译
变量的定义与使用
#!/bin/sh
#File by
echo helloworld!
#局部变量
A=10
echo $A
#环境变量(全局变量)
echo $PWD
运行:
./xxx.sh //注意该操作需要有可执行权限
/bin/bask xxx.bash //该执行命令不需要有执行权限
输出结果 :
helloworld!
10
/Users/zhngfengcheng/android/canjun/shellWork
系统的输入参数
header 1 | header 2 |
---|---|
$0 | 当前程序的名称 |
$n | 当前方法执行的第n个参数 |
$* | 当前方法执行的所有参数 |
$# | 当前方法执行时,参数的个数 |
$? | 当前方法执行是否成功 |
#File demo.sh:
#!/bin/sh
#File by
echo helloworld!
#局部变量
A=10
echo $A
#环境变量(全局变量)
echo $PWD
echo $0
echo "\$2 is $2"
echo "\$* is $*"
echo "\$# is $#"
echo "\$? is $?"
执行命令操作:
./demo.sh zhang feng cheng
运行结果如下:
helloworld!
10
/Users/zhngfengcheng/android/canjun/shellWork
./demo.sh
$2 is feng
$* is zhang feng cheng
$# is 3
$? is 0
for 语法
for 变量 in 字符串
do
语句1
done
案例1:
#File number.sh
#!/bin/bash
for i in `seq 25 30`
do
echo "number $i"
done
执行代码
./number.sh
运行结果:
number 25
number 26
number 27
number 28
number 29
number 30
案例2 求和(expr)
#File number.sh
#!/bin/bash
sum=0
for((i=0;i<=100;i++))
do
sum=`expr $i + $sum`
done
echo $sum
执行代码
./number.sh
运行结果:
5050
注意事项:
1. 当for循环内部使用的数值运算,要使用(())包起来
2. 当要获取命令执行后的输出,要使用 ``将其包起来。
3. expr $i + $sum 之所以表达式有空格,是因为这些都是命令 expr的参数, 在shell中参数是以空格进行分隔的。
案例3(将某个目录下的某些文件进行压缩):
#!/bin/bash
for i in `find /Users/zhngfengcheng/android/canjun/shellWork -name "*.aa"`
do
tar cvf compress.tgz $i
done
常用的sh命令整理一下
while循环
案例1 算数运算
#!/bin/bash
i=1
while((i<100))
do
echo "number $i" #注意此处必须用双引号
i=`expr $i + 1`
done
案例2 逻辑运算
#!/bin/bash
i=1
while [[ $i -lt 100 ]] #注意中括号与表达式之间的空格
do
echo "number $i"
i=`expr $i + 1`
done
while读写文件
使用到的命令是 read。在shell中,
# read varName
# 123
# echo $varName
输出结果:123
#File text.txt
今天要学习shell了!
我首先要把简单的shell命令记住
#File readText.sh 用来读取text.txt中的文件内容
#!/bin/bash
while read line
do
echo $line
done < /Users/zhngfengcheng/android/canjun/shellWork/text.txt
运行结果:
今天要学习shell了!
我首先要把简单的shell命令记住
if语句
语句格式
-
格式一
if();then //注意此处的then不能省略 fi
-
格式二
if();then 语句一 else 语句二 fi
shell语句中,1)没有大括号 2)空格不能随便写,因为其有特殊的含义
最简单的比较大小
#!/bin/bash
NUM1=100
NUM2=200
if(($NUM1<$NUM2));
echo "num1 < num2"
fi
#!/bin/bash
NUM1=300
NUM2=200
if(($NUM1<$NUM2));then
echo "num1 < num2"
else
echo "num2 > num1"
fi
逻辑表达式
表达式 | 含义 |
---|---|
-f | 文件是否存在 |
-d | 目录是否存在 |
-eg | 是否等于(整型比较) |
-ne | 不等于 |
-le | 小于 |
-ge | 大于或者等于 |
-a | 双方都成立 |
-o | 单方成立 |
-z | 是否是空字符串 |
案例一:判断 ~/shellWork 目录是否存在,如果存在,则提示“目录已经存在”;否则创建该目录
#!/bin/bash
#定义要查找的目录
DIR=/shellWork
if [ ! -d $DIR ]; then //注意这里中括号的格式
mkdir -p $DIR
else
echo "该目录已经存在!!!"
fi
案例二:判断 ~/shellWork/canjun.txt是否存在,如果存在,则打印该文件的内容
#!/bin/bash
#定义要查找的目录
DIR=/shellWork/text.txt
if [ -f $DIR ]; then
cat $DIR
fi
算数运算符
- 算符运算符
- 关系运算符
- 布尔运算符
- 字符串运算符
- 文件测试运算符
算符运算符
算数符号 | 含义 |
---|---|
+ | expr $a + $b |
- | expr $a - $b |
* | expr $a \* $b |
/ | expr $a / $b |
= | a=$b |
== | [ $a == $b ] |
!= | [ $a != $b ] |
关系运算符
算数符号 | 含义 |
---|---|
-eq | 等于 |
-ne | 不等于 |
-gt | 大于 |
-lt | 小于 |
-ge | 大于等于 |
-le | 小于等于 |
布尔预算福
算数符号 | 含义 |
---|---|
! | 非 |
-a | 与 |
-o | 或者 |
逻辑运算符
算数符号 | 含义 |
---|---|
&& | [[ $a -lt 100 && $a -ge 50 ]] |
|| | 略 |
字符串运算符
算数符号 | 含义 |
---|---|
= | 检查字符串是否相等 |
!= | 略 |
-z | 检查字符串的长度是否为0 |
-n | 检查字符串的长度是否不为0 |
$ | 检查字符串是否为空,不为空为true |
文件检测运算符
算数符号 | 含义 |
---|---|
-f | 判断文件是否存在 |
-d | 判断目录是否存在 |
案例
算数运算符
使用 $(()) $[] let命令或者 expr外部程式
r = $((5 + 4))
echo $r
r = $[ 5 + 4 ]
echo $r
n=10
let r = n + 1
echo $r
r = `expr 5 + 1`
echo $r
布尔类型
!/bin/bash
a=10
b=20
if [ $a != $b ]
then
echo "$a != $b : a 不等于b"
fi
比较两个字符串是否相等
!/bin/bash
a="abc"
b="xyz"
if [ $a = $b ]
then
echo " $a = $b : a 等于 b "
else
echo " $a != $b : a 不等于 b "
fi