shell之shift、test、printf

1、Shift的用法 (参数左移)

位置参数可以用shift命令左移。
shift 3:表示将$1$2$3丢弃,$4现在变成$1$5现在变成$2$0不移动。不带参数的shift,默认左移1
对于位置变量或命令行参数,其个数必须是确定的,或者当 Shell 程序不知道其个数时,可以把所有参数一起赋值给变量Shell1 后为 2,2 后面为 3shift1 的值在 shift 命令执行后就不可用了。
1
2
3
4
5
6
#!/bin/bash
until [ $# -eq 0 ]  #unti 循环和 while 循环恰好相反,当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环。
do
echo "第一个参数为: $1 参数个数为: $#"
shift  #默认为 1
done
执行结果
1
2
3
4
5
6
7
$ bash shift.sh  12 32 4 5 2 1
第一个参数为: 12 参数个数为: 6
第一个参数为: 32 参数个数为: 5
第一个参数为: 4 参数个数为: 4
第一个参数为: 5 参数个数为: 3
第一个参数为: 2 参数个数为: 2
第一个参数为: 1 参数个数为: 1

2、test判断条件是否成立

用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

数值测试

1
2
3
4
5
6
7
8
9
10
11
12
$ cat  test.sh
#!/bin/bash
num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi
<br>$ bash  test.sh
两个数相等!

代码中的 [] 执行基本的算数运算,如:

1
2
$ echo "$[3*3]"
9

# 注意等号两边不能有空格

字符串测试

文件测试

1
2
3
4
5
6
7
8
9
10
11
$ cat test.sh
#!/bin/bash
cd /bin
if test -e ./bash
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi
<br>$ bash test.sh
文件已存在!

另外,Shell 还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为: ! 最高, -a 次之, -o 最低。例如:

1
2
3
4
5
6
7
8
9
cd /bin
if test -e ./notFile -o -e ./bash
then
    echo '至少有一个文件存在!'
else
    echo '两个文件都不存在'
fi
 
至少有一个文件存在!

3、printf用例

printf 命令模仿 C 程序库(library)里的 printf() 程序。由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。

printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。

1
2
3
4
$ echo "Hello, Shell"
Hello, Shell
$ printf "Hello, Shell\n"
Hello, Shell

脚本用例

1
2
3
4
5
#!/bin/bash
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876

$ bash tizhong.sh

1
2
3
4
姓名     性别   体重kg
郭靖     男      66.12
杨过     男      48.65
郭芙     女      47.99

%s  %c %d %f 都是格式替代符:

%s 输出一个字符串;

%d 整型输出;

%c 字符输出;

%f 浮点数。

%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

%-4.2f 指格式化为小数,其中 .2 指保留2位小数。

 

posted @   凡人半睁眼  阅读(400)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示