音视频:10.Shell脚本-详解Shell脚本基础语法

1.shell 脚本创建与执行(01.sh)

一般都是**.sh文件

  • #!:需要用谁来解析执行该 shell 脚本
  • echo:打印输出
# 需要用谁来解析执行该 shell 脚本
#!/bin/bash

# echo 打印输出
echo "Hello Shell!"

2.自定义变量与环境变量(02.sh)

变量设计规则:

  1. 命名跟Java规范一样
  2. shell 中默认都是字符串类,如果需要用到其他类型,需要额外处理
  3. 变量用等号连接,千万注意不能有空格
  4. 变量的值如果有空格,需要用单引号或者双引号包括
  • $:取变量的值
  • echo "CMAKE_PATH = ${CMAKE_PATH}":输出环境变量CMAKE_PATH的值
  • soPath=`pwd`:记得带上``代表执行命令并返回
#指定一个命令的执行结果返回给变量
#soPath=$(pwd)
soPath=`pwd`
echo "soPath = ${soPath}"
str1="str1"  // str1
str2=str2    // str2
str3=3       // 3
str4="Hello Shell" // Hello Shell

# 重新赋值
str4=str4 // str4

# $取变量的值
echo "str1 = $str1" // str1 = str1
echo "str2 = $str2" // str2 = str2
echo "str3 = $str3" // str3 = 3
echo "str4 = $str4" // str4 = str4

#输出环境变量
echo "CMAKE_PATH = ${CMAKE_PATH}"

#指定一个命令的执行结果返回给变量
#soPath=$(pwd)  
soPath=`pwd`  // soPath = 当前路径
echo "soPath = ${soPath}" 

3.位置参数变量与预定义变量

3.1.获取位置参数(03.sh)

  • $n 来获取参数,$0 代表程序本身,$1-$9代表第一个参数到第九个参数,十以上的参数要用大括号 ${10}
  • $* 代表的是命令中的所有参数,加上引号才会把参数看成一个整体 “$0,$1,$2,$3, 4... 4... 4...n”,否则区别对待
  • $@ 代表命令中的所有参数,但是会把参数区分对待 “$0”,"$1",“ 2 " . . . " 2"..." 2"..."n”
  • $# 代表参数中的个数
echo "$0=$0"
echo "\$1=$1"
echo "\$2="$2


echo "\$*="$*
echo "\$@="$@
echo "\$#="$#

#每次逻动(删除)第一个参数
shift

echo "\$1=$1"
echo "\$@="$@

echo "========================================"
for i in $*
do
echo $i
done

echo "========================================"
for i in $@
do
echo $i
done

echo "========================================"
for i in "$@"
do
echo $i
done

echo "========================================"
for i in "$*"  // 加上引号才会看成一个整体
do
echo $i
done

3.2.预定义变量

定义:是 bash 中已经定义好的,我们可以直接拿过来用,变量的作用都是固定

  • $?:返回的是上一个执行命令的返回值,执行成功返回 0 ,执行失败返回非0
  • $$:获取当前脚本的进程号
  • $!:获取最后一个后台执行的进程号

3.3.获取输入的变量(04.sh)

  • read -p "提示" name:name 代表接受的变量名
  • read -sp "提示" pwd-sp 看不到输入的密码,pwd 代表接受的变量名
  • read -t 5 -n 1 -p "please input [y|n]" input:-t 5代表5秒没响应就退出,-n 1 代表只能输入1个字符
# 获取用户及时输入的参数
#read -p "please input your name!" name
#echo "name = $name"

#输入年龄
# read -sp "please input your password" pwd
# echo "password=$pwd"

read -t 5 -n 1 -p "please input [y|n]" input
echo "input = $input" 

4.条件判断(测试指令)(05.sh)

条件判断 test 表达式 或者 []

数字计算:

  • num3=$(($num1+$num2))
  • num3=`expr $num1 + $num2` // 执行 expr命令,一定要有空格 传的三个参数
  • test $str1 == $str2 // ==之间一定更要空格

字符串空判断:

  • [ str ]: 测试字符串是否不为空,[]中间必须带空格
  • test -n str: 测试字符串是否不为空
  • test -z str: 测试字符串是否为空
  • [ str1 = str2 ]: 是否相等,[]中间必须带空格

数字:

  • [ num1 -eq num2 ]: 测试是否相等
  • [ num1 -ne num2 ]: 不等
  • [ num1 -ge num2 ]: >=
  • [ num1 -gt num2 ]: >
  • [ num1 -le num2 ]: <=
  • [ num1 -lt num2 ]: <

文件:

  • test -d file:是否是目录
  • test -f file:是否是普通文件
  • test -e file:文件是否存在
  • test -L file:是否是链接
  • test -r file:是否可读
  • test -w file:是否可写
  • test -x file:是否可执行

5.流程语句 if (06.sh)

有两种方式:

if [ 表达式 ]; then

if [ 表达式 ]
then
# 判断有没有输入
if [ -z $1 ]
then
	# echo "usage:./build_ogre.sh [build_type]"
        # echo "build_type: Release or Debug (must have)"
	# exit
	error
fi

# 需要用户去指定编译 Debug 还是 Release
CMAKE_BUILD_TYPE=""
if [ "Debug" = $1 ]; then
	CMAKE_BUILD_TYPE="Debug"
elif [ "Release" = $1 ]; then
	CMAKE_BUILD_TYPE="Release"
else
	error arm
fi

6.自定义函数(06.sh)

  • 函数需要先定义再使用,function和()必须有其一
  • 可以直接采用方法名调用,不用加()
  • $1 参数不是代表的脚本参数,而是方法传递过来的参数
// function和()可以只有一个
function error(){ 
	echo "usage:./build_ogre.sh [build_type]"
        echo "build_type: Release or Debug (must have)"
	# 函数需要穿参数 arm $1 参数不是代表的脚本参数,而是方法传递过来的参数 
	echo "\$1 = $1"
        exit
}

7.流程语句 for、while、case (06.sh)

for:

for((i=0;i<10;i++))
do
echo $i
done

while:

sum=0
i=1
while(($i<=100))
do
	sum=$(($sum+$i))
	i=$(($i+1))
done
echo "sum = $sum"

case:

case $2 in
start)
	echo "start service"
	;;
stop)
	echo "stop service"
	;;
*)
	echo "invalid command"
	echo "Usage:{start|stop}"
esac

8.输出重定向(07.sh)

0: 标准输入,1:标准输出 2:标准错误输出

  • echo "Hello Shell!" > log.txt // 输出日志到 log.txt 中,> 代表重新生成
  • echo "Hello Shell!" >> log.txt // 输出日志到 log.txt 中,>> 代表追加
  • exec 1>log.txt:标准的所有输出,重新生成全部添加到log.txt中
  • exec 2>>log.txt:标准的错误输出,全部追加到log.txt中
# 永久重定向  echo 标准输入:0 标准输出:1 标准错误:2
exec 1>log.txt
exec 2>>log.txt
# >> 代表追加,> 代表重新生成
# 临时重定向
# echo "Hello Shell!" > log.txt   
# echo "Hello Shell!" >> log.txt   

echo "Hello Shell"
echo "Hello Shell"
echo "Hello Shell"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值