获取字符串与传递参数-shell笔记2

相关遇到的:

[-z string] “string”的长度为零则为真,常在if语句里。-a表示为and:条件与

[-b file] 如果file存在且是一个块特殊文件则为真 
[-c file] 如果file存在且是一个字特殊文件则为真 
[-d file] 如果file文件存在且是一个目录则为真 

如:

if [ "${is_online}" == "on" -a ! -z "${commit_id}" ]; then
    echo "[ERROR] is_online and commit_id cannot setted in same time"
    help
fi

上面代码就表示,如果is_online变量的值为on 且commit_id的变量值不为空,则输出错误信息,并运行help函数。(常用在模型上线时)

获取字符串长度

变量名前加#

string="abcd"
length=${#string}
echo ${length}

输出 4

 

提取子字符串

在变量名后面加上:start:end ,不同于python要加中括号。

string="runob is a great site"
echo ${string:1:4}
输出unob

 

查找子字符串

查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)(注意是位置,此位置是从1开始。)

string="runob is a great site"
echo `expr index "${string}" io`

输出: 4

注意1: 以上脚本中 ` 是反引号(mac英文状态下摁最左上角的第二个键),而不是单引号 ',不要看错了哦。

expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。

expr用处2:

#!/bin/bash
val=`expr 2 + 2`
echo "两数之和$val"

执行脚本输出: 4

两点注意:

  • 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
  • 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

详见:https://www.runoob.com/linux/linux-comm-expr.html

Shell传递参数

其中 $0的含是是包括行文件路径在内文件名。比如 sh  /tmp/test_self.sh   其中的$0是包括了/tmp/test_self.sh在内的内容,而不是单指文件名(此处当前菜鸟教程上的表述有误)

$i是执行文件名后的第i个参数。

 

$#   传递到脚本的参数个数

$*   以一个单字符串显示所有向脚本传递的参数

例子:

echo "第一个参数: $1";

echo "传递参数个数:$#"

echo "传递的参数作一个字符串:$*";

 

$* 与 $@ 区别:

  • 相同点:都是引用所有参数。
  • 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。

如:test_self.sh中代码

#!/bin/bash
echo "-- \$* 演示 ---"
for i in "$*"; do
    echo $i
done

echo "-- \$@ 演示 ---"
for i in "$@"; do
    echo $i
done

 

在termina 中输入 命令:

sh test_self.sh 1 2 3

输出:

-- $* 演示 ---
1 2 3
-- $@ 演示 ---
1
2
3

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值