字符串
单引号和双引号的区别:
单引号
单引号里的任何字符都会原样输出,不解析变量;
单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
双引号
双引号里可以解析变量
双引号里可以出现转义字符
拼接字符串
[root@bogon ~]# name="jack"
[root@bogon ~]# echo "你的名字是:$name"
你的名字是:jack
[root@bogon ~]# echo "你的名字是:${name}"
你的名字是:jack
[root@bogon ~]# echo "你的名字是:""$name"
你的名字是:jack
[root@bogon ~]# echo "你的名字是:"$name
你的名字是:jack
字符串最好放到双引号中,防止中间有空格等情况。
info="${name}""${email}""${sex}"
total="$name""$email""$sex"
获取字符串长度
${#name}
截取子字符串
[root@bogon ~]# echo "你的名字是:"$name
你的名字是:jack
[root@bogon ~]# echo "你的名字长度是""${#name}"
你的名字长度是4
[root@bogon ~]# echo "子字符串截取""${name:1:2}"
子字符串截取ac
[root@bogon ~]# echo `expr substr "$name" 2 2`
ac
数组
定义数组
在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。
# 方式一
nameArr=('zhansan' 'lisi' 'wangwu' )
# 方式二
nameArr=(
'jack'
'mary'
'andy'
)
# 方式三
nameArr[0]='芳芳'
nameArr[1]='花花'
nameArr[2]='翠翠'
读取数组
# 索引读取
echo '第一个姓名:'"${nameArr[0]}"
# 所有元素
echo '所有姓名:'"${nameArr[*]}"
echo '所有姓名:'"${nameArr[@]}"
数组长度
# 总长度
echo '姓名数量:'"${#nameArr[*]}"
echo '姓名数量:'"${#nameArr[@]}"
# 单个元素长度
echo '第一个姓名长度:'"${#nameArr[0]}"
echo命令
显示转义字符
echo "\"It is a test\""
显示变量
echo "$name It is a test"
echo "${mouth}-1-2009"
显示换行
echo "OK!\n"
显示不换行
echo "OK!\c"
echo "It is a test"
显示结果重定向至文件
echo "It is a test" > myfile
原样输出字符串
使用单引号。
echo '$name\"'
显示命令执行结果
echo `date`
printf命令
- printf 命令用于格式化输出, 是echo命令的增强版。
- printf 由 POSIX 标准所定义,移植性要比 echo 好。
- 不能自动换行
- 功能和用法与 printf 命令类似
printf 命令的语法:
printf format-string [arguments...]
# format-string为双引号
$ printf "%d %s\n" 1 "abc"
1 abc
# 单引号与双引号效果一样
$ printf '%d %s\n' 1 "abc"
1 abc
# 没有引号也可以输出
$ printf %s abcdef
abcdef
# 格式只指定了一个参数,但多出的参数仍然会按照该格式输出
$ printf %s abc def
abcdef
$ printf "%s\n" abc def
abc
def
# 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
$ printf "%s and %d \n"
and 0