音视频学习(三)Shell脚本入门

介绍

Shell 是用C语言编写的程序,用户使用Linux桥接。Shell是命令语言,又是程序设计语言。访问操作系统内核服务。

Shell 入门学习

打开编辑器(vi/vim 命令来创建文件),新建test.sh,扩展名为sh。

第一个Shell脚本

./test.sh

如果有权限问题,则赋予脚本执行权限

chmod +x ./test.sh

#! 是一个约定的标记,需要什么解释器来执行。
echo 向窗口输出文本

变量

定义变量时

my_name="George"

注意:变量名和等号之间无空格。同时变量命名需要遵循如下规则

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)
  • 不能使用标点符号
  • 不能使用bash里的关键字(可以用help命令查看保留关键字)
    除了显示地直赋值,也可以用语句赋值。
#!/bin/bash
# for file in $后边那个不是单引号,是左上角esc下的键,否则不起作用
for file in $`ls /Users/george/C`
do
echo $file
done

使用变量

#!/bin/bash
my_name="George"
echo $my_name
# 变量名外面的花括号是可选的
echo ${my_name}

只读变量

#!/bin/bash
# 只读变量
my_name="George"
readonly my_name
my_name="George1"

删除变量:

#!/bin/bash
# 变量被删除后不能被再次使用。unset 命令不能删除只读变量
my_name="George"
unset my_name
echo $my_name

变量类型:
运行shell时,同时存在三种变量

  • 局部变量 脚本或者命令中定义,仅在当前shell例中有效,其他shell启动的程序不能访问局部变量
  • 环境变量 所有程序,包括shell启动的程序
  • shell变量 是由shell程序设定的特殊变量。shell变量中有一部分是环境变量,一部分是局部变量。

字符串
字符串可以用单引号或者双引号,也可以不用引号
单引号字符串限制:

  • 任何字符都会原样输出,字符串中变量是无效的。
  • 不能单独出现,可以成对出现字符串拼接
    双引号优点:
  • 双引号里可以有变量
  • 可以转义字符

数组
Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小

array_name=(value1 ... valuen)
#!/bin/bash
my_array=(A B "C" D)
echo "第1个元素为: ${my_array[0]}"
echo "第2个元素为: ${my_array[1]}"
echo "第3个元素为: ${my_array[2]}"
echo "第一个元素为: ${my_array[3]}"

# 使用@ 或 * 可以获取数组中所有元素
echo "数组的元素为 ${my_array[*]}"
echo "数组的元素为 ${my_array[@]}"

# 获取数组长度的方法与获取字符串长度的方法相同
echo "数组元素个数为 ${#my_array[*]}"
echo "数组元素个数为 ${#my_array[@]}"

运算符

支持多种运算符,包括:

  • 算数
  • 关系
  • 布尔
  • 字符串
  • 文件测试
    原生bash 不支持简单数学运算,可以通过其他命令实现。例如:awk和expr
    express 是一款表达式计算工具
    注意:
  • 表达式和运算符之间要有空格
  • 完整的表达式要被 ` 包含(Esc键下的键)
    算数运算符
运算符 说明 举例
+ 加法 expr $a + $b 结果为 30。
- 减法 expr $a - $b 结果为 -10。
* 乘法 expr $a \* $b 结果为 200。
/ 除法 expr $b / $a 结果为 2。
% 取余 expr $b % $a 结果为 0。
= 赋值 a=$b 将把变量 b 的值赋给 a。
== 相等。用于比较两个数字,相同则返回 true。 [ b ] 返回 false。
!= 不相等。用于比较两个数字,不相同则返回 true。 [ b ] 返回 true。

注意:条件表达式要放在方括号之间,并且要有空格

#!/bin/bash
a=10
b=10

val=`expr $a + $b`
echo "a + b: $val"

val=`expr $a - $b`
echo "a -b : $val"

val=`expr $b \* $a`
echo "a * b : $val"

val=`expr $b / $a`
echo "b / a : $val"

val=`expr $b % $a`
echo "b % a : $val"

if [ $a == $b ]
then
    echo "a 等于 b"
fi
if [[ $a != $b ]]; 
then
    echo "a 不等于 b"
fi

关系运算符
只支持数字,不支持字符串,除非字符串的值是数字。

运算符 说明 举例
-eq 检测两个数是否相等,相等返回 true。 [ b ] 返回 false。
-ne 检测两个数是否不相等,不相等返回 true。 [ b ] 返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ b ] 返回 false。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ b ] 返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ b ] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ b ] 返回 true。
#!/bin/bash
a=10
b=20
if [ $a -eq $b ]; 
then
    echo "$a -eq $b : a 等于 b"
else
    echo "$a -eq $b a 不等于 b"
fi
if [ $a -ne $b ]
then
    echo "$a -ne $b: a 不等于 b"
else
    echo "$a -ne $b: a 等于 b"
fi

if [ $a -gt $b ]
then
    echo "$a -gt $b: a大于b"
else
    echo "$a -gt $b: a小于b"
fi

if [ $a -lt $b ]
then
    echo "$a -lt $b: a小于b"
else
    echo "$a -lt $b: a不小于b"
fi

if [ $a -ge $b ]
then
    echo "$a -ge $b: a大于或等于b"
else
    echo "$a -ge $b: a小于b"
fi

if [ $a -le $b ]
then
    echo "$a -le $b: a小于或等于b"
else
    echo "$a -le $b: a大于b"
fi

总结

一些shell的命令可以自行补充。

你可能感兴趣的:(音视频学习(三)Shell脚本入门)