Skip to content

我们在调用shell脚本时,经常会对其传递参数,我们可以获取到从shell脚本外部传递过去的参数

Shell参数

  1. 位置参数:如给一个脚本传递一个参数,我们可以在 Shell 脚本内部获取传入的位置参数,通过 $1$2$3这种方式获取,$0是脚本的名称
  2. 特殊参数:在 Shell 中也存在特殊含义的参数如下表:
变量含义
$#传递给脚本或函数的参数个数总和
$*传递给脚本或函数的所有参数,当被双引号 " " 包含时,所有的位置参数被看做一个字符串
$@传递给脚本或函数的所有参数,当被双引号 " " 包含时,每个位置参数被看做独立的字符串
$?上个命令的退出状态,或函数的返回值,0 为执行成功,非 0 则为执行失败
$$当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。

输出语句

输出语句分为echo和printf两种,还能控制输出文字的颜色与背景色以及识别转义字符等

1.echo输出语句使用方式

  • 默认输出:echo 'hello'
  • 不换行输出:echo -n 'hello'
  • 单引号原样输出:echo '${str}'
  • 双引号输出变量值:echo '${str}'

2.echo开启转义识别

  • 使用 -e 开启转义,可处理特殊字符,例如\n是换行符号:echo -e 'hello\nshell'

    | 符号 | 含义 | | ---- | ----------------------------- | | \n | 换行符号 | | \t | 制表符,也就是按我们的 tab 键 | | \r | 回车键 | | \a | 从系统喇叭送出铃声 | | \\ | 显示反斜线本身 | | \f | FORMFEED,换页字符 | | \E | ESCAPE,跳脱键 |

3.输出内容到文件中

  • 把字符输入到文件中,如果没有此文件会自动创建:echo 'hello' > test.sh,此时如果文件有内容会被替换
  • 清空文件内容:echo > test.sh

4.控制输出文字的颜色与背景色

在 Shell 中我们有时候需要与用户进行交互式操作,如果输出的内容有颜色,对于用户识别更为明显。Shell 中 echo 可以对字体颜色 / 背景 / 显示方式进行控制,如下表:

字体颜色字体背景颜色显示方式
30:黑40:黑
31:红41:深红0:终端默认设置
32:绿42:绿1:高亮显示
33:黄43:黄色4:下划线
34:蓝色44:蓝色5:闪烁
35:紫色45:紫色7:反白显示
36:深绿46:深绿8:隐藏
37:白色47:白色
格式:
\033[1;31;40m# 1 是显示方式,可选。31 是字体颜色。40m 是字体背景颜色。
\033[0m# 恢复终端默认颜色,即取消颜色设置。

字体颜色案例

shell
for i in {30..37};do echo -e "\033[$i;40m hello shell \033[0m";done

背景颜色案例

shell
for i in {40..47};do echo -e "\033[47;${i}m hello shell \033[0m";done

5.pritf语句的使用

  • 打印普通字符串:printf 'hello shell',如果需要换行,需要手动显式添加 \n

  • 格式化字符串,例如 printf "hello %s\n" shell 输出hello shell

    %c ASCII字符.显示相对应参数的第一个字符
    %d,%i 十进制整数(常用)
    %e 浮点格式([-d].precisione [+-dd])
    %E 浮点格式([-d].precisionE [+-dd])
    %g %e或%f转换,看哪一个较短,则删除结尾的零
    %G %E或%f转换,看哪一个较短,则删除结尾的零
    %s 字符串(常用)
    %u 不带正负号的十进制值
    %x 不带正负号的十六进制.使用a至f表示10至15
    %% 字面意义的%
    %X 不带正负号的十六进制.使用A至F表示10至15
  • printf中单双引号没有区别