bash shell自己常用的一些语法积累(更新中)

1.常见的内部参数

$0:包含路径的命令名
$#:传递给程序的所有参数数目
$?:shell程序返回值,正常退出返回0,反之为非0$*:传递给程序的所有参数组成的字符串
$1:传递给shell程序的第1个参数
$2:传递给shell程序的第2个参数,以此类推

2.条件测试表达式

字符串比较:

[  ${x} = ${y} ]      等于
[  ${x} != ${y} ]     不等于
[ -n ${x} ]           非空字符串
[ -z ${x} ]           空字符串

数值比较:

[  ${x} -eq ${y} ]  等于
[  ${x} -ne ${y} ]  不等于
[  ${x} -gt  ${y} ]  大于
[  ${x} -lt   ${y} ]  小于
[  ${x} -le ${y} ] 小于等于
[  ${x} -ge ${y} ]   大于等于

文档比较:

 [ -e filename ]  判断filename文档是否存在
 [ -d filename ] 判断filename是否为目录
 [ -f /usr/bin/grep ] 判断filename是否为常规文件
 [ -L /usr/bin/grep ] 判断filename是否为符号链接
 [ -r /var/log/syslog ] 判断filename是否可读
 [ -w /var/mytmp.txt ] 判断filename是否可写
 [ -L /usr/bin/grep ] 判断filename是否可执行

3.if条件判断

基本格式为:

if 条件测试表达式; then
….
elif 条件测试表达式; then
….
else
….
fi

示例:

if [ “$var1” = “$var2” ];then
    echo “equel”
else
    echo “not eq”
fi

4.一种特殊的数值比较

除了使用上面的-eq/-lt/-gt等命令进行数值比较以外,我们还可以用另一种特殊的方式进行数值比较:(($x > $y))

(())只能用来做数值类型比较,其他的字符串比较是不可以的。

示例:

#!/bin/bash
echo "please input two number:"
read x y
if ((${x} <= ${y}))
then
    echo "x bigger than y"
else
    echo "x smaller than y"
fi

5.数值计算 $(())

使用$(())进行数值计算,示例:

 #!/bin/bash

 echo "please input two number:"
 read x y
 sum=$(($x + $y))
 echo sum of $x and $y is: $sum

6.脚本中调用命令$()

使用$()来调用shell命令,并把返回值赋值给一个变量,示例:

#!/bin/bash
configs=($(ls arch/arm64/configs/*))
echo ${configs[@]}

7.打印一个字符串列表

#!/bin/bash
str=("apple" "orange" "banana" "grape")
echo ${str[@]}

8.提取目录的文件名(去除路径名)

采用命令${var##*/}来提取:去除左边算起最后一个/左边的内容
(如果只有1个#,${var#*/}则表示去除左边算起第一个/左边的内容)

 #!/bin/bash

 val=/home/ubuntu/work/.repo/manifest.xml
 echo ${val##*/}

9.提取目录的路径名(去除文件名)

采用命令${var%/*}来提取:去除右边算起第一个/右边的内容
(如果有2个%%,${var%%/*}则表示去除右边算起最后一个/右边的内容)

#!/bin/bash
val=/home/ubuntu/work/.repo/manifest.xml
echo ${val%/*}

附录:自己写的一个完整的快速内核编译脚本

 #!/bin/bash

 i=0
 configs=($(ls arch/arm64/configs/*))
 #echo ${configs[@]}

 for file in ${configs[@]}
 do
     echo ${i}:${file##*/};
     ((i++));
 done

 echo please input your choice:
 read choice

 target=${configs[${choice}]##*/}

 echo target is: ${target}

 sleep 5

 case $choice in
     *) echo "good";;
 esac

 if [ -d `pwd`/out ]
 then
     rm `pwd`/out;mkdir `pwd`/out
 else
     mkdir `pwd`/out
 fi

 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- O=`pwd`/out $target
 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- O=`pwd`/out -j8
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值