目录

Shell学习

题记

由于要跑kaldi(一个语音识别工具),里面有很多shell脚本要运行,所以快速学习一遍shell,主要是参考https://www.runoob.com/linux/linux-shell-variable.html 学习。

变量

显式定义

  • 代码
1
2
3
your_name="cj"
echo $your_name
echo "Hi ${your_name}!!!"
  • 输出
1
2
cj
Hi cj!!!

注意:1. 等号=两边不能有空格. 2. 调用的时候要写$ 3.调用变量可以加上花括号{},来帮助确定变量名的边界.

隐式定义

  • 代码
1
2
3
echo `ls ./|grep sh`
echo $(ls ./|grep sh)
echo $(pwd)
  • 输出
1
2
3
learn.sh
learn.sh
/home

只读变量和删除变量

1
2
3
4
myUrl="http://www.google.com"
readonly myUrl
variable=“cj”
unset variable

要点:1. 若修改只读变量会报错 2. unset 命令不能删除只读变量

字符串

单引号

  • 代码
1
2
3
4
5
v='variable'
s='${v}\n Hi'
echo -e $s
join='hi '$v
echo $join
  • 输出
1
2
3
${v}
 Hi
hi variable

要点:不能使用变量

双引号

要点:可以使用转义符和变量

  • 代码
1
2
3
4
5
v='variable'
s="${v}\n Hi"
echo -e $s
join="hi $v"
echo $join
  • 输出
1
2
3
variable
 Hi
hi variable

不用引号

中间不能有空格,转义的\n变成输出n了。

1
2
3
4
5
v=variable
s=${v}\nHi
echo -e $s
join='hi '$v
echo $join
  • 输出
1
2
variablenHi
hi variable

字符串操作

  • 获取字符串长度

    1
    2
    
    string="abcd"
    echo ${#string} #输出 4
    
  • 提取子字符串

    1
    2
    
    string="runoob is a great site"
    echo ${string:1:4} # 输出 unoo
    
  • 查找子字符串

1
2
string="runoob is a great site"
echo `expr index "$string" io`  # 输出 4

数组

定义数组

1
array_name=(value0 value1 value2 value3)

读取数组

1
${数组名[下标]}

@获取数组所有元素

1
echo ${array_name[@]}