shell基础(三)

字符串

单引号和双引号的区别:

单引号

单引号里的任何字符都会原样输出,不解析变量;
单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

双引号

双引号里可以解析变量
双引号里可以出现转义字符

拼接字符串

[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

你可能感兴趣的:(shell基础(三))