Shell编程之基本语法

为什么要学习shell
ffmpeg 音视频
什么是shell
构建一个大型项目,不断打包,编译,这么一系列的操作,可以使用shell;
学习目标
学习路线
  1. 变量的定义与使用
  2. 语法详解
  3. 方法参数传递机制的详解
  4. 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 1header 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语句

语句格式
  1. 格式一

     if();then //注意此处的then不能省略
     fi
    
  2. 格式二

     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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值