shell脚本创建和运行
#需要谁来解析执行该shell脚本
#!/bin/bash
#echo打印输出
echo "hello shell"
修改权限:chmod u+x xx.sh
自定义变量和预定义变量
变量设置规则
1、命名和Java规范一样
2、shell中默认都是字符串类型,如果需要用到其他类型,需要额外处理
3、变量用等号连接,千万不能有空格
4、变量的值如果有空格,需要用单引号或者双引号
#变量设置规则
#1、命名和Java规范一样
#2、shell中默认都是字符串类型,如果需要用到其他类型,需要额外处理
#3、变量用等号连接,千万不能有空格
#4、变量的值如果有空格,需要用单引号或者双引号
str1="str1"
str2=str2
str3=3
str4="str4"
#修改变量的值
str4=str4
# $取变量的值
echo "str1 = $str1"
echo "str2 = $str2"
echo "str3 = $str3"
echo "str4 = $str4"
#输出环境变量
echo "CMAKE_PATH= ${NDK_PATH}"
#指定一个命令的执行返回结果给变量
#soPath=${pwd}
soPath=`pwd`
echo "soPath =${soPath}"
位置参数变量与预定义变量
#!/bin/bash
# 获取参数
# $n 来获取参数,$0 代表程序本身,$1-$9代表第一个参数到第九个参数,十以上的参数要用大括号 ${10}
# $* 代表的是命令中的所有参数,但是会把参数看成一个整体 "$0,$1,$2,$3,$4...$n"
# $@ 代表命令中的所有参数,但是会把参数区分对待 "$0","$1","$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
预定以变量:是bash中已经定义好的, 变量的作用是固定
$?:返回的是上一个执行命令的返回值,执行成功返回0,执行失败返回非0
$$:返回的是当前脚本的进程号
$!:获取最后一个在后台执行的进程号
获取用户输入的参数
#!/bin/bash
#获取用户及时输入的参数
read -p "please your name!" name
echo "name =$name
sp表示不显示
#!/bin/bash
#获取用户及时输入的参数
#read -p "please your name!" name
#echo "name =$name"
#输入年龄
read -sp "please input your age!" age
echo "age =$age"
输入yes/no以及5s没响应直接跳过
#!/bin/bash
#输入yes/no
read -t 5 -n 1 -p "please input [y|n]" input
echo "input =$input"
条件判断 test expression 或者[]
- 数字计算
#!/bin/bash
#条件判断 test expression 或者[]
#测试的范围:整数,字符串,文件
num1=1
num2=2
#数字计算 expr命令 $(())
num3=$((num1+num2))
echo $num3
- 判断两个字符串是否为空
#!/bin/bash
#条件判断 test expression 或者[]
str1=peakmain
str2=jack
test $str1 == $str2
echo "$?"
-
[str]测试字符串是否不为空
-
test -n str 测试字符串是否不为空
-
test -z str 测试字符串是否为空
-
判断数字是否相等:
[num1 - eq num2] -
判断数字不等
[num -ne num2] -
判断数字大于等于
[num1 -ge num2] -
判断数字是否小于等于
[num1 -ln num2] -
判断数字是否大于
[num1 -gt 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
流程控制语句和函数
#!/bin/bash
#函数需要先定义再使用
function error(){
echo "usage: ./build_ogre.sh [build_type]"
echo "build_type:Release or Debug(must have)"
exit
}
#需要用户去指定编译Debug还是Release
#判断是否有输入
if [ -z $1 ]
then
error
fi
CMAKE_BUILD_TYPE=""
if [ $1 = "Debug" ]; then
CMAKE_BUILD_TYPE="Debug"
elif [ $1 = "Release" ]; then
CMAKE_BUILD_TYPE="Release"
else
echo "usage: ./build_ogre.sh [build_type]"
echo "build_type:Release or Debug(must have)"
exit
fi
echo "start build ogre $CMAKE_BUILD_TYPE"
echo "==========="
for((i=0;i<10;i++))
do
echo $i
done
echo "==========="
sum =0
i=1
while(($i<=100))
do
sum=$(($sum+$i))
i=$(($i+1))
done
echo "sum =$sum"
echo "==========="
case $2 in
start)
echo "start service"
;;
stop)
echo "stop service"
;;
*)
echo "invalid command"
echo "Usage:{start|stop}"
esac
输出错误日志,输出日志,输出配置文件
>代表重新生成,>>代表追加
#需要谁来解析执行该shell脚本
#!/bin/bash
echo "Hello Shell" >log.txt
网友评论