赞
踩
目录
- %s: 指定输出字符串。
- %d、%i: 指定输出十进制整数。
- %o: 指定输出八进制数。
- %x、%X: 指定输出十六进制数。
- %f、%F: 指定输出浮点数。
- %e、%E: 以科学计数法输出浮点数。
- %c: 指定输出字符。
- %%: 输出一个百分号。
用法:printf '<参数>' '<字符串>'
示例:printf '%s' 'abc'
- \":输出一个双引号
- \\:输出一个反斜杠
- %%:输出一个百分号
-
- \n:输出换行
- \t:水平制表符
- \v:垂直制表符
- \r:输出回车
- \f:换页
-
- \a:发出警报
- \b:退格
- \e:删除右边一个字符
用法:printf '<参数> <字符串>'
示例:printf '\t abc'
1、直接输出字符串(不会主动换行)
printf "Hello, World"
2、输出字符串后面加入换行符(换行符加入哪里,哪里开始换行)
- printf "Hello, World\n"
- printf "Hello, \nWorld\n"
3、于上述同理,制表符也是一样
printf "a\tb\tc\n"
4、输出一些不想转义的字符
- printf "\" \n" # 输出双引号
- printf "\\ \n" # 输出反斜杠
- printf "%% \n" # 输出百分号
1、输出字符串、整数、浮点数、科学计数法浮点数
- printf "%s \n" "abc" # 输出字符串
- printf "%d \n" "100" # 输出整数
- printf "%.2f \n" "3.1415926" # 输出浮点数,精度为2
- printf "%e \n" "3.1415926" # 输出浮点数科学计算法
2、输出多个参数(按顺序输入)
printf "%s, %d, %.2f \n" "abc" "10" "3.1415926"
3、使用变量传入参数
方法一
- a="abc"
- b=10
- c=3.1415926
- printf "%s, %d, %.2f \n" "$a" "$b" "$c"
方法二
- [yt@localhost ~]$ read -r v1 v2 v3 v4 v5 <<< `seq 5`
- [yt@localhost ~]$ printf "var1=%s, var2=%s, var3=%s, var4=%s, var5=%s \n" "$v1" "$v2" "$v3" "$v4" "$v5"
- var1=1, var2=2, var3=3, var4=4, var5=5
方法三
- [yt@localhost ~]$ data="a,b,c,d,e"
- [yt@localhost ~]$ IFS=',' read -r v1 v2 v3 v4 v5 <<< "$data"
- [yt@localhost ~]$ printf "var1=%s, var2=%s, var3=%s, var4=%s, var5=%s \n" "$v1" "$v2" "$v3" "$v4" "$v5"
- var1=a, var2=b, var3=c, var4=d, var5=e
1、左对齐、右对齐(区别就是左对齐使用符号 - )
- # 设置宽度为10
- printf "|%-10s| \n" "abc"
- printf "|%10s| \n" "abc"
2、居中对齐(计算字符串宽度与总宽度之间的空格,将这些空格补全)
- # 设置输出的字符串
- text="abc"
- # 指定总的宽度(需要大于字符串的长度)
- width=10
- # (总宽度 - 字符串宽度) / 2 = 空格长度,这个长度单独输出
- padding=$[(${width} - ${#text}) / 2]
- # 空格长度 + 字符串 + 空格长度
- printf "|%${padding}s%s%${padding}s| \n" "" "$text" ""
1、设置最小宽度
- #设置宽度为5。默认右对齐,左对齐将5s改为-5s
- printf "|%5s| \n" "abc"
2、设置最大宽度(超过宽度自动截断)
- #设置最大宽度为5。只有左对齐
- printf "|%.5s| \n" "abc"
超过指定宽度以省略号替代
printf "|%.5s...| \n" "abcdefg"
1、数字补全(指定位数,不够以0补全)
- # 指定5位整数,不足以0补全
- printf "%05d \n" "123"
- # 指定5位浮点数,小数点精确2位,不足以0补全(小数点也算1位)
- printf "%05.2f \n" "3.1415926"
2、字符串补全(printf 本身不支持字符串替换,利用 tr 命令)
- # 左对齐,将空格替换为 -
- printf "%-10s\n" "abc" |tr ' ' '-'
- # 右对齐,将空格替换为 -
- printf "%10s\n" "abc" |tr ' ' '-'
设置属性(有些属性终端不支持或者需要单独配置)
- 重置所有文本属性:\033[0m
- 设置粗体:\033[1m
- 设置斜体:\033[3m
- 设置下划线:\033[4m
- 设置闪烁:\033[5m
- 设置反显(前景色与背景色互换):\033[7m
- 关闭闪烁和反显:\033[0m
设置文本颜色(30~37)
- 黑色:\033[30m
- 红色:\033[31m
- 绿色:\033[32m
- 黄色:\033[33m
- 蓝色:\033[34m
- 洋红:\033[35m
- 青色:\033[36m
- 白色:\033[37m
设置背景色(40~47)
- 黑色背景:\033[40m
- 红色背景:\033[41m
- 绿色背景:\033[42m
- 黄色背景:\033[43m
- 蓝色背景:\033[44m
- 洋红背景:\033[45m
- 青色背景:\033[46m
- 白色背景:\033[47m
1、基本用法
2、设置文本颜色
printf "\033[31mHello World\033[0m \n"
3、设置背景颜色
printf "\033[41mHello World\033[0m \n"
- printf "\033[30m 文本黑色 \033[0m \n"
- printf "\033[31m 文本红色 \033[0m \n"
- printf "\033[32m 文本绿色 \033[0m \n"
- printf "\033[33m 文本黄色 \033[0m \n"
- printf "\033[34m 文本蓝色 \033[0m \n"
- printf "\033[35m 文本洋红色 \033[0m \n"
- printf "\033[36m 文本青色 \033[0m \n"
- printf "\033[37m 文本白色 \033[0m \n"
- printf "\033[40m 背景黑色 \033[0m \n"
- printf "\033[41m 背景红色 \033[0m \n"
- printf "\033[42m 背景绿色 \033[0m \n"
- printf "\033[43m 背景黄色 \033[0m \n"
- printf "\033[44m 背景蓝色 \033[0m \n"
- printf "\033[45m 背景洋红色 \033[0m \n"
- printf "\033[46m 背景青色 \033[0m \n"
- printf "\033[47m 背景白色 \033[0m \n"
1、通过宽度设置来制作
- printf "%-20s %-20s %-20s \n" "id" "name" "avg"
- printf "%-20s %-20s %-20s \n" "1" "xiao_wang" "18"
- printf "%-20s %-20s %-20s \n" "2" "xiao_zhang" "20"
- printf "%-20s %-20s %-20s \n" "3" "xiao_li" "16"
2、第1次优化代码,将执行方法写入函数
- Output(){
- printf "%-20s %-20s %-20s \n" `echo $1 |xargs -n 1`
- }
- Output "id name avg"
- Output "1 xiao_wang 18"
- Output "2 xiao_zhang 20"
- Output "3 xiao_li 16"
3、第2次优化代码,增加分割线(使用perl)
- # 开始前打印横线
- perl -E "say '-' x 67"
-
- function Output(){
- # 输出字符串,设置每个表格宽度为20
- printf "|%-20s |%-20s |%-20s |\n" `echo $1 |xargs -n 1`
- # 结束后打印横线
- perl -E "say '-' x 67"
- }
-
- # 向函数传入需要打印的字符串
- Output "id name avg"
- Output "1 xiao_wang 18"
- Output "2 xiao_zhang 20"
- Output "3 xiao_li 16"
4、第3次优化代码,将需要填入表格的字符串放入变量
- # 将需要传入的字符串全部写入一个变量
- var="
- id name avg
- 1 xiao_wang 18
- 2 xiao_zhang 20
- 3 xiao_li 16"
-
- # 封装一个打印表格的方法
- perl -E "say '-' x 67"
- function Output(){
- printf "|%-20s |%-20s |%-20s |\n" `echo $1 |xargs -n 1`
- perl -E "say '-' x 67"
- }
-
- # 指定循环的分隔符为换行
- OLD_IFS=$IFS; IFS=$'\n'
- # 遍历遍历中的字符串
- for i in ${var};do
- # 传入不为空的字符串到Output方法
- [ -n "${i}" ] && Output ${i}
- done
- # 还原分隔符
- IFS=$OLD_IFS
- #!/bin/bash
-
- # CPU
- cpu_name="$(grep '^model name' /proc/cpuinfo |awk -F ': ' 'NR==1{print $2}')"
- cpu_proc="$(grep 'processor' /proc/cpuinfo |wc -l)"
-
- # Memory
- mem_total="$(free -h |awk '$1=="Mem:"{print $2}')"
- mem_free="$(free -h |awk '$1=="Mem:"{print $4}')"
- swap_total="$(free -h |awk '$1=="Swap:"{print $2}')"
- swap_free="$(free -h |awk '$1=="Swap:"{print $4}')"
-
- # Disk
- dev_name="$(ls /sys/block/ |grep -vE "loop|dm|sr")"
-
- # Network
- net_name="$(ip route get 8.8.8.8 |awk -F 'dev' 'NR==1{print $2}' |awk '{print $1}')"
- host="$(ip route get 8.8.8.8 |awk -F 'src' 'NR==1{print $2}' |awk '{print $1}')"
- bandwidth="$(ethtool ens33 |awk '$1=="Speed:"{print $2}')"
-
- # 封装一个输出表格的方法
- echo -e "硬件信息如下:"
- perl -E "say '——' x 37"
- Output(){
- printf "|%-20s |%-50s|\n" "$1" "$2"
- perl -E "say '——' x 37"
- }
-
- # 向Output传入硬件信息
- Output "CPU model name" "${cpu_name}"
- Output "CPU processor" "${cpu_proc}"
- Output "Memory (free/total)" "${mem_free} / ${mem_total}"
- Output "Swap (free/total)" "${swap_free} / ${swap_total}"
- for d in ${dev_name};do
- disk_size="$(lsblk -o size -d /dev/${d} |awk 'NR==2{print $1}')"
- if [[ "$d" =~ "nvme" ]];then
- Output "Disk (${d})" "NVME (${disk_size})"
- else
- if [ `cat /sys/block/${d}/queue/rotational` -eq 1 ];then
- Output "Disk (${d})" "HDD (${disk_size})"
- else
- Output "Disk (${d})" "SSD (${disk_size})"
- fi
- fi
- done
- Output "Network" "${host} (${net_name}, ${bandwidth})"
- #!/bin/bash
-
- # 需要运行某个任务的次数
- total_iterations=100000
-
- for i in $(seq 1 ${total_iterations}); do
- # 计算百分比(取整)
- percentage=$((i * 100 / total_iterations))
-
- # 输出百分比并保持在同一行
- printf "Progress: %d%%\r" $percentage
-
- # 运行任务
- echo "$i" >> ./tmp.txt
- done
-
- # 输出最终完成状态
- printf "Progress: 100%%\n"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。