第一章、终端打印、算术运算、常用变量

1、终端打印

echo

[root@ceshi ~]# echo hello world

hello world

[root@ceshi ~]# echo 'hello world'

hello world

[root@ceshi ~]# echo "hello world"

hello world

printf

[root@ceshi ~]# printf "hello world\n"  # n代表换行
hello world
[root@ceshi ~]# vi info.sh        
#!/bin/bash

printf "%-5s %-10s %-4s\n" Num Name Mark
printf "%-5s %-10s %-4d\n" 1 aa 90
printf "%-5s %-10s %-4.2f\n" 1 bbb 80.1234
printf "%-5s %-10s %-4.3f\n" 1 ccccc 60.1234

%-5s 表示格式为左对齐,且宽度为5的字符串代替(-表示左对齐),不使用-则是右对齐(s表示字符串)
%d 代表十进制整数
%-4.3f 表示格式为左对齐宽度为4,'.3'代表保留3位小数,f代表浮点数

[root@ceshi ~]# /bin/bash info.sh 
Num   Name       Mark
1     aa         90  
1     bbb        80.12
1     ccccc      60.123

格式替代符号

  1. %b 代表对应的参数被视为有要被处理的转义序列之字符串
  2. %c ASCII字符。显示对应参数的第一个字符
  3. %d,%i 都代表十进制整数
  4. %e,%E,%f 代表浮点类型
  5. %g,%e或%f 转换,看哪一个较短,则删除结尾的零
  6. %G,%E或%F 转换,看哪一个较短,则删除结尾的零
  7. %o 不带正负号的八进制值
  8. %s 代表字符串类型
  9. %u 不带正负号的十进制
  10. %x 不带正负号的十六进制值,使用a-f表示10-15
  11. %X 不带正负号的十六进制值,使用A-F表示10-15
  12. %% 字面意义的%

转义序列

  1. \a 警告字符,通常为ASCII的bel字符
  2. \b 后退
  3. \c 抑制输出结果中任何结尾的换行字符(只在%b指示符参数中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略。
  4. \f 换页(英文formfeed)
  5. \n 换行
  6. \r 回车(英文Carriage return)
  7. \t 水平制表符,(其实就是所在的行不换行了)
  8. \v 垂直制表符,
  9. \ 字面意义上的反斜杠
  10. \ddd 表示1-3位数八进制值的字符,仅在格式字符串中有效
  11. \0ddd 表示1-3位的八进制值字符

在echo中转义换行符包含

echo -e “包含转义序列的字符串”

-e :就可以识别出字符串里边的转义序列,不加e默认不识别转义序列

[root@ceshi ~]# echo -e "你好\t你好\t"
你好    你好
[root@ceshi ~]# echo -e "你好\v你好\v"
你好
    你好

# 不加-e 就没有识别转义序列
[root@ceshi ~]# echo "你好\t你好\t"   
你好\t你好\t
[root@ceshi ~]# echo "你好\v你好\v"   
你好\v你好\v

打印彩色输出

[root@ceshi ~]# echo -e "\033[5;31;42m你好\033[0m" 

参考:https://blog.51cto.com/506554897/1932861

2、算术运算

整数运算

let运算命令

[root@ceshi ~]# vi let.sh
#!/bin/bash
num1=2
num2=3
let result=num1+num2
echo $result

运行:
[root@ceshi ~]# /bin/bash let.sh 
5
  1. 自加操作 let num1++

  2. 自减操作 let num1--

  3. 简写形式:let no+=10let ; let no-=20

    ​ 等同于:let no=no+10; let no=no-20

操作符[]运算方法

[root@ceshi ~]# vi fangkuohao.sh
#!/bin/bash
num1=2
num2=3
result=$[$num1+num2]
echo $result

运行:
[root@ceshi ~]# /bin/bash fangkuohao.sh 
5

注:使用方法和let相似,在[]中可以使用$前缀

(())运算方法

[root@ceshi ~]# vi xiaokuohao.sh
#!/bin/bash
n1=2
n2=3
result=$((n1+n2))
echo $result

expr运算方法

[root@ceshi ~]# expr 2 + 3         
5
[root@ceshi ~]# num1=5
[root@ceshi ~]# r=$(expr $num1 + 5)
[root@ceshi ~]# echo $num1
5
[root@ceshi ~]# echo $r
10

expr的常用运算符

  • +
  • -
  • *
  • /
  • % 取模运算,也叫取余

精密计算

高级运算工具:bc

它可以执行浮点运算和一些高级函数

[root@ceshi ~]# echo "1.25*3" | bc
3.75

设定小数精度(也就是小数点显示几位)

scale=2 代表小数点显示2位

[root@ceshi ~]# echo "scale=2;7/3" | bc  
2.33

进制转换

十进制转二进制:
[root@ceshi ~]# a=192
[root@ceshi ~]# echo "obase=2;$a" |bc
11000000

二进制转十进制:
[root@ceshi ~]# b=11000000                   
[root@ceshi ~]# echo "obase=10;ibase=2;$b"|bc
192

计算平方和平方根

求2的三次方:
[root@ceshi ~]# echo "2^3"|bc  
8

求100的平方根
[root@ceshi ~]# echo "sqrt(100)"|bc
10

3、常用变量

给变量赋值的不同方式

双引号"" 允许用过$符号引用其他变量值

单引号'' 禁止引用其他变量值,$视为普通字符

反撇号`` 将命令执行的记过输出给变量;如:

sed -i s/"B"/"b"/g `grep -rl "B" --exclude="*.sql" ceshi/*`  将grep得到的文件传输给sed使用

用户自定义变量

设置变量的作用范围

格式:

export 变量名

export 变量名=变量值

清除变量名:

unset 变量名

自定义变量
[root@ceshi ~]# export a            #自定义变量a
[root@ceshi ~]# export b=222        #自定义变量b
[root@ceshi ~]# a=111               #给变量a赋值

[root@ceshi ~]# echo $a             #打印变量a的值
111
[root@ceshi ~]# echo $b             #打印变量b的值
222

清除变量:
[root@ceshi ~]# unset a             #清除变量a
[root@ceshi ~]# unset b             #清除变量b
[root@ceshi ~]# echo $a             #输出为空

[root@ceshi ~]# echo $b

环境变量

环境变量配置文件

  • 全局配置文件:/etc/profile

  • 用户配置文件:~/.bash_profile

查看环境变量:

set 命令可以查看所有的shell变量,其中包括环境变量

常见的环境变量

  • $USER 查看当前用户
  • $logname 登录相关信息
  • $UID 当前用户的UID,root用户为0
  • $SHELL 打印当前用户的shell编辑器
  • $HOME 打印当前用户的主目录
  • $pwd 打印当前所在目录
  • $PATH 用户输入的命令在哪里目录中查找
  • $PS1
  • $PS2
  • $RANDOM 显示一个随机数

位置变量

表示为:$n (n为1-9之间的数字)

#./test.sh one two three four five six
  • $0 表示文件名本身

  • $1 表示one

  • $2 表示two

    依次类推

预定义变量

  1. $# 命令行中位置参数的个数
  2. $* 所有位置参数的内容
  3. $? 上一条命令执行后返回的状态,为0表示成功,为非0表示执行异常或出错
  4. $$ 当前所在进程的进程号
  5. $! 后台运行的最后一个进程号
  6. $0 当前执行的进程/程序名