SHELL脚本攻略(学习笔记)--1.2 echo和printf打印输出

1.2.1 echo的引号问题

关于echo的用法,注意点就是单引号和双引号的特殊情况。以打印“Hello World!”为例。

[[email protected] tmp]# echo Hello World!

Hello World!

[[email protected] tmp]# echo ‘Hello World!‘

Hello World!

[[email protected] tmp]# echo "Hello World!"   #双引号不能打印感叹号

-bash: !": event not found

[[email protected] tmp]# echo Hello World!;echo ‘Hello World!‘  #感叹号后面不能接分号

-bash: !: event not found

[[email protected] tmp]# echo ‘Hello World!‘;echo Hello World!  #感叹号可以在最结尾

Hello World!

Hello World!

从上面几个实验发现,感叹号后面不能接除了单引号的任何符号和字符,因为默认情况下开启了使用感叹号引用内存中的历史命令的设置,可以使用set +H关闭该设置,这时可以使用感叹号输出。

[[email protected] tmp]# set +H

[[email protected] tmp]# echo "Hello World!"

Hello World!

如果echo不加任何引号,很显然不能输出分号“;”,只加单引号又不能扩展变量,使用双引号又不好输出感叹号,所以要考虑好如何使用echo。

[[email protected] tmp]# echo Hello World;

Hello World  #分号作为断行符号被忽略了

[[email protected] tmp]# str=World!

[[email protected] tmp]# echo ‘Hello${str}‘

Hello${str}  #变量作为普通字符输出了

1.2.2 echo中的转义

echo -e识别转义和特殊意义的符号,如换行符/n、制表符/t、转义符\等。

[[email protected] tmp]# echo ‘Hello World!\n‘;echo "Hello World"!  

Hello World!\n

Hello World!

[[email protected] tmp]# echo -e ‘Hello World!\n‘;echo "Hello World"!

Hello World!

#换行

Hello World!

1.2.3 echo默认的分行处理

不加-n的默认情况下echo会在每行行尾加上换行符号,使用echo -n取消分行输出。

[[email protected] tmp]# echo ‘Hello World!‘>abc.sh  #输入完就加了分行符号

[[email protected] tmp]# echo ‘Hello World!‘>>abc.sh

[[email protected] tmp]# cat abc.sh

Hello World!

Hello World!

[[email protected] tmp]# echo -n ‘Hello World!‘>abc.sh   #取消了分行符号

[[email protected] tmp]# echo ‘Hello World!‘>>abc.sh 

[[email protected] tmp]# cat abc.sh

Hello World!Hello World!

1.2.4 echo的颜色输出

echo可以控制字体颜色和背景颜色输出。

常见的字体颜色:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,紫色=35,天蓝色=36,白色=37。

常见的背景颜色:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,紫色=45,天蓝色=46,白色=47。

因为需要使用特殊符号,所以需要配合-e选项来识别特殊符号。

[[email protected] tmp]# echo -e "\e[1;41m Red Bcakground \e[0m"

[[email protected] tmp]# echo -e "\e[1;31m Red Bcakground \e[0m" 

其中任意一个\e可以使用\033替换。如:

[[email protected] tmp]# echo -e "\033[1;41m Red Bcakground \033[0m"

[[email protected] tmp]# echo -e "\e[1;31m Red Bcakground \033[0m" 

颜色还有些控制:1表示高亮、4表示下划线、5表示闪烁等。

1.2.5 printf

使用printf可以输出更规则更格式化的结果。它引用于C语言的printf命令,但是有些许区别。

使用printf可以指定字符串的宽度、实现左对齐(使用减符号-)、右对齐(默认的)、格式化小数输出等。使用printf最需要注意的一点是printf默认不在结尾加换行符,它不像echo一样,所以要手动加“/n”换号。

[[email protected] tmp]# cat >abc.sh<<eof  #将下面的内容覆盖到abc.sh脚本中

> #!/bin/bash

> #文件名:abc.sh

> printf "%-5s %-10s %-4s\n" No Name Mark     #三个%分别对应后面的三个参数

> printf "%-5s %-10s %-4.2f\n" 1 Sarath 80.34 #减号“-”表示左对齐

> printf "%-5s %-10s %-4.2f\n" 2 James 90.998 #5s表示第一个参数占用5个字符

> printf "%-5s %-10s %-4.2f\n" 3 Jeff 77.564

> eof
[[email protected] tmp]# sh abc.sh  #执行结果:左对齐,取小数点后两位

No    Name       Mark

1     Sarath     80.34

2     James      91.00

3     Jeff         77.56

[[email protected] tmp]# sed -i s#‘-‘##g abc.sh  #将减号“-”去掉,结果将右对齐

[[email protected] tmp]# sh abc.sh

No       Name Mark

1     Sarath 80.34

2      James 91.00

3         Jeff 77.56

printf中还可以加入分行符、制表符等符号。

[[email protected] tmp]# vim abc.sh   #修改abc.sh将其改为如下格式

#!/bin/bash

#文件名:abc.sh

printf "%-s\t %-s\t %s\n" No Name Mark

printf "%-s\t %-s\t %4.2f\n" 1 Sarath 80.34

printf "%-s\t %-s\t %4.2f\n" 2 James 90.998

printf "%-s\t %-s\t %4.2f\n" 3 Jeff 77.564
[[email protected] tmp]# sh abc.sh  #出现制表符

No       Name    Mark

1        Sarath  80.34

2        James   91.00

3        Jeff      77.56

printf还有一个常见的i格式,表示对整型格式化占用几个整数,前面示例中的s表示对字符格式化。

时间: 2024-10-13 16:44:16

SHELL脚本攻略(学习笔记)--1.2 echo和printf打印输出的相关文章

SHELL脚本攻略(学习笔记)--1.7 expr命令全解

expr命令可以实现数值运算.数值或字符串比较.字符串匹配.字符串提取.字符串长度计算等功能.它还具有几个特殊功能,判断变量或参数是否为整数.是否为空.是否为0等. 先看expr命令的info文档info coreutils 'expr invocation'的翻译. 16.4.1 字符串表达式 ------------------------- 'expr'支持模式匹配和字符串操作.字符串表达式的优先级高于数值表达式和 逻辑关系表达式. 'STRING : REGEX' 执行模式匹配.两端参数

SHELL脚本攻略(学习笔记)--1.6 数学运算和bc命令

本文目录: 1.6.1 基本整数运算 1.6.2 bc命令高级算术运算 使用let.$(())或$[]进行基本的整数运算,使用bc进行高级的运算,包括小数运算.其中expr命令也能进行整数运算,还能判断参数是否为整数,具体用法见expr命令全解. 1.6.1 基本整数运算 [[email protected] tmp]# str=10 [[email protected] tmp]# let str=str+6 # 等价于let str+=6 [[email protected] tmp]# l

《Linux Shell脚本攻略》 笔记 第一章:Shell起步基础

<Linux Shell脚本攻略> 笔记 第一章:Shell起步基础 1.变量:在bash中,每一个变量的值都是字符串.无论你给变量赋值时,有没有使用引号,值都会以字符串的形式存储. 2.var=value; //赋值操作 var = value: //相等操作 3.获取字符串的长度 [[email protected] ~]$ var=yang [[email protected] ~]$ length=${#var} [[email protected] ~]$ echo $length

《Linux Shell脚本攻略》 笔记 第二章:常用命令

<Linux Shell脚本攻略> 笔记 第二章:常用命令 1.cat cat -s //多个空白行压缩成一个 cat *.txt | tr -s '\n'   //移除空白行 cat -n //加行号 2.find 沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作. eg: find ./ ! -name "*.txt" -print [[email protected] program_test]# find ./  -type f -name "

《Linux Shell脚本攻略》 笔记 第三章:文件操作

<Linux Shell脚本攻略> 笔记 第三章:文件操作 1.生产任意大小的文件 [[email protected] dd_test]# [[email protected] dd_test]# dd if=/dev/zero of=junk.data bs=1k count=10 10+0 records in 10+0 records out 10240 bytes (10 kB) copied, 0.00137023 s, 7.5 MB/s 2.文件系统相关测试 [ -f $file

《Linux Shell脚本攻略》 笔记 第四章:高效文本处理

<Linux Shell脚本攻略> 笔记 第四章:高效文本处理 1.IP地址的正则表达式: [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} 2.grep用法 //在多级目录中对文本进行递归检索 [[email protected] program_test]# grep "yang" ./ -Rn ./test.txt:6:laoyang ./right.txt:1:1 yang man //忽略大小写匹配 [[email pr

《Linux Shell脚本攻略》 笔记 第六章:打包压缩

<Linux Shell脚本攻略> 笔记 第六章:打包压缩 //1.打包.解包 [[email protected] program_test]# tar -cf output.tar 11.txt 22.txt 33.txt [[email protected] program_test]# tar -xf output.tar -C ./tar-file/  //-C指定要提取到哪个路径? //列举出归档文件中的内容 [[email protected] program_test]# ta

Linux Shell 脚本攻略阅读笔记第1章 小试牛刀

一.简介 1.Bash(Bourne Again Shell),目前大多数GNU/Linux系统默认的shell环境. 命令都是在shell终端中输入并执行.打开终端后,提示符的形式:[email protected]$       或    [email protected] #     ($表示普通用户,#表示管理员用户root) 2.shell脚本是一个以#!(shebang)起始的文本文件,如下:   #!/bin/bash shebang是一个文本行,其中#!位于解释器路径之前./bi

LINUX SHELL脚本攻略笔记[速查]

Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述符和重定向 cat 数组和关联数组 alias date 调试脚本 函数和参数 管道 读取命令输出 read 字段分隔符和迭代器 循环 比较和测试 find xargs tr md5sum sha1sum 对目录进行校验 sort uniq tempfile split bash变量匹配切分 exp

Linux Shell脚本攻略(1.12)

1.12 函数和参数 和其他脚本语言一样,Bash同样支持函数,并且可以传递参数. 1.12.1 函数定义和传参 #!/bin/bash function fname() #也可以用fname()代替 { echo $1,$2; #访问参数1和参数2 echo "[email protected]"; #以列表的方式一次性打印所有参数 echo "$*"; #类似于[email protected],但是参数被作为单个实体 return 0; #返回值 } fnam