1. shell变量名遵循规则
- 首个字母必须为字母 (a-z,A-Z)
- 中间不能有空格,可以使用下划线 (_)
- 不能使用标点符号
- 不能使用bash中的关键字
- 可以用语句给变量赋值 例: dirs=`ls /etc`
- 使用变量需要在前面加上$ 例: echo $dirs
- 变量名外面的花括号是可选的,加花括号是为了帮助解释器识别变量名的边界,但推荐使用变量名加上花括号
- 已经定义的变量,也科研之直接被重新定义
2. shell字符串
- 单引号
单引号里面的字符都会原样输出
#!/bin/bash
root@803e41ac5ea4:/# echo 'this is ECho % \n \c \\\ //'
this is ECho % \n \c \\\ //
单引号中字符串变量是无效的
#!/bin/bash
root@803e41ac5ea4:/# echo ' $name $name \t'
$name $name \t
单引号字符串中不能出现单引号 (即使使用转义字符也无效)
#!/bin/bash
root@803e41ac5ea4:/# echo ' this is ' '
> exit
>
root@803e41ac5ea4:/# echo 'this is \' this is'
>
会提示你继续输入,指导输入下一个单引号退出打印
- 双引号
双引号中可以有变量
#!/bin/bash
root@803e41ac5ea4:/# your_name="Swift"
root@803e41ac5ea4:/# echo " your name is ${your_name}. "
your name is Swift.
双引号中可以出现转义字符
#!/bin/bash
root@803e41ac5ea4:/# your_name="Swift"
root@803e41ac5ea4:/# echo " your name is ${your_name}.\t hello! "
your name is Swift.\t hello!
双引号中可以出现双引号 (转义字符)
#!/bin/bash
root@803e41ac5ea4:/# your_name="Swift"
root@803e41ac5ea4:/# echo " your name is ${your_name}.\t \" hello! "
your name is Swift.\t " hello!
- 拼接字符串
#!/bin/bash
root@803e41ac5ea4:/# your_name="Swift"
root@803e41ac5ea4:/# str1="hello , "${your_name}" !"
root@803e41ac5ea4:/# echo $str1
hello , Swift !
root@803e41ac5ea4:/# str2="hello , ${your_name} !"
root@803e41ac5ea4:/# echo $str2
hello , Swift !
- 获取字符串长度
${#string} string为要获取字符串
#!/bin/bash
root@803e41ac5ea4:/# echo ${#str1}
15
root@803e41ac5ea4:/# echo ${#str2}
15
- 提取字符串
expr index "$string" index_str
说明:string 要查找的字符串 index_str 查找的字符串, 返回子字符第一次出现的位置
#!/bin/bash
root@803e41ac5ea4:/# strings="My name is Swift !"
root@803e41ac5ea4:/# echo `expr index "$strings" f`
15
3. shell 数组
- 基础定义
(1)bash 只支持1维数组(不支持多维数组)
(2)shell数组不限定数组的大小
(3)数组元素的下标从0开始
(4)数组定义可以不使用不连续的下标,且下标范围没有限制
- 定义数组
数组名=(值1 值2 值3 ... 值n)
#!/bin/bash
##例:
##方法一
array_name=(name1 name2 name3 ... namen)
##方法二
array_name=(name1
name2
name3
...
namen
)
##方法三 单独定义数组的值
array_name[0]=name1
array_name[1]=name2
...
array_name[n]=namen
- 读取数组
${数组名[下标]}
#!/bin/bash
##例
## 取单独某个值
value=${arry_name[1]}
## 获取数组中所有的元素 下面俩种方法都可以获取
values=${array_name[*]}
values=${array_name[@]}
- 获取数组长度
#!/bin/bash
## 获取数组的长度
length=${#array_name[@]}
length=${#array_name[*]}
## 获取单个元素的长度
single_length=${#array_name[n]}
数组获取长度的方法实际与获取字符串长度的方法相同。
4. shell 注释
- shell中以"#"开头的行就是注释
- shell中没有多行注释,只能多行注释时都在前面加上"#"
- 可以把需要注释的一段代码写到一个function中,可以减少#号的大片书写
5. shell echo 命令
- 显示普通字符串
#!/bin/bash
root@803e41ac5ea4:/# echo "My name is Swift"
My name is Swift
root@803e41ac5ea4:/# echo My name is Swift
My name is Swift
- 显示转义字符
#!/bin/bash
root@803e41ac5ea4:/# echo "\"My name is Swift\""
"My name is Swift"
- 显示变量
#!/bin/bash
root@803e41ac5ea4:/# my_name="Swift"
root@803e41ac5ea4:/# echo "My name is ${my_name}"
My name is Swift
- 显示换行
此处需要使用参数-e 来开启转义字符
#!/bin/bash
root@803e41ac5ea4:/# echo -e " ok \n my name is Swift"
ok
my name is Swift
- 显示不换行
#!/bin/bash
root@803e41ac5ea4:/# echo -e " ok \c my name is Swift"
ok my name is Swift
- 显示结果定向到文件
#!/bin/bash
echo "My name is Swift" >myFile
- 不进行转义(用单引号)
#!/bin/bash
root@803e41ac5ea4:/# echo 'My name is Swift \n'
My name is Swift \n
显示命令结果 ( ` )
#!/bin/bash
root@803e41ac5ea4:/# echo `date`
Sat Sep 15 10:04:26 UTC 2018