相关遇到的:
[-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