定义变量

  • 定义和赋值变量时,变量名不加$
  • 变量名和=之间不能有空格
  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
  • 中间不能有空格
  • 不能使用标点符号和bash里的关键字

也可以通过语句对变量赋值:

for file in `ls /etc`

for file in $(ls /etc)

使用变量

  • 使用定义过的变量时,要在变量名前面加$
  • 如果变量名的边界需要识别,则用{}作为变量名的边界
  • 推荐给所有变量加上花括号,这是个好的编程习惯
  • 使用readonly命令可以将变量修改为只读
  • 使用unset命令可以将变量删除

字符串

  • 使用单引号、双引号都可以,但双引号里可以有变量和转义字符

拼接字符串

your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1

# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3

获取字符串长度

string="abcd"
echo ${#string}   # 输出 4
echo ${#string[0]}   # 输出 4,变量为字符串时,${#string} 等价于 ${#string[0]}

提取子字符串

第一个字符的索引值为 0。

string="runoob is a great site"
echo ${string:1:4} # 输出 unoo

查找子字符串

查找字符 i 或 o 的位置:

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

数组

  • bash只支持一维数组

定义数组

数组名=(值1 值2 ... 值n)

使用数组

${数组名[下标]}

下标使用@符号可以获取数组的所有元素。

获取数组的长度

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
length=${#array_name[n]}

注释

Shell的单行注释用#开头,多行注释可以用:

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

EOF可以替换为别的符号,也可以去掉,去掉的话用单引号把内容包括住:

: '
这是注释的部分。
可以有多行内容。
'