当前位置: 首页 > 工具软件 > AI Shell > 使用案例 >

Linux shell脚本——参数和输入输出

松英叡
2023-12-01

没有学不会的技术

01 位置参数和特殊变量

1 位置参数和特殊变量:$**

$0 相当于C语言main函数的argv[0],表示脚本本身文件名称

$1、$2 相当于C语言main函数的argv[1]、argv[2]…,表示脚本文件名后的第1…个参数

$# 相当于C语言main函数的argc -1,表示参数个数

$@ 表示所有参数列表

$* 表示所有参数列表

$? 表示上一条命令的Exit Status

$$ 表示当前进程号,脚本运行时的PID

shift n 表示位置参数左移,如shift 2 表示$1、$2丢弃,后续的位置参数变成$1、$2…

综合实例:

创建argv.sh文件,输入如下内容:

echo "第一个参数:"
echo $1

echo "第二个参数:" 
echo $2

echo "第三个参数:"
echo $3

echo "参数总个数:"
echo $#

echo "所有参数:"
echo $@

shift 2

echo "所有参数:"
echo $*

echo "上一条命令的执行状态:"
echo $?

echo "当前进程号:"
echo $$

在终端运行可执行文件,查看输出结果:

lihoon@lihoon:~/code/Linux_shell$ ./argv.sh aa bb cc dd ee ff
脚本名称
./argv.sh
第一个参数:
aa
第二个参数:
bb
第三个参数:
cc
参数总个数:
6
所有参数:
aa bb cc dd ee ff
所有参数:
cc dd ee ff
上一条命令的执行状态:
0
当前进程号:
10084

02 输入输出

2 echo——显示文本行或者变量:echo [option] string

-e——解析转义字符

-n——不回车换号(默认情况下,echo的内容后面会跟一个回车换行)

lihoon@lihoon:~/code/Linux_shell$ echo "hello\n\n"
hello\n\n
lihoon@lihoon:~/code/Linux_shell$ echo -e "hello\n\n"
hello


lihoon@lihoon:~/code/Linux_shell$ echo -n "hello"
hellolihoon@lihoon:~/code/Linux_shell$ 

3 printf——打印文本:printf string

hellolihoon@lihoon:~/code/Linux_shell$ printf "hello\n"
hello

4 管道:通过 | 把一个命令的输出传递给另一个命令做输入

lihoon@lihoon:~/code/Linux_shell$ ls -l | grep "argv.sh"
-rwxrw-r-- 1 lihoon lihoon  327 8月   9 21:11 argv.sh

5 tee——把结果输出到标准输出,另一个符文输出到相应的文件

-a——在原来输出文件的基础上追加其他输出

lihoon@lihoon:~/code/Linux_shell$ df -k | awk '{print $1}' |grep -v "文件系统" | tee a.txt
udev
tmpfs
/dev/nvme0n1p6
tmpfs
tmpfs
tmpfs
/dev/loop2
/dev/nvme0n1p4
/dev/nvme0n1p7
/dev/nvme0n1p1
/dev/loop17
tmpfs
tmpfs
/dev/sda1

lihoon@lihoon:~/code/Linux_shell$ cat a.txt 
udev
tmpfs
/dev/nvme0n1p6
tmpfs
tmpfs
tmpfs
/dev/loop2
/dev/nvme0n1p4
/dev/nvme0n1p7
/dev/nvme0n1p1
/dev/loop17
tmpfs
tmpfs
/dev/sda1

6 文件重定向

cmd > file 把标准输出重定向到新文件中

cmd >> file 把标注输出追加到原来的文件中

cmd > file 2 > &1 把标准出错重定向到文件中

cmd >> file 2 > &1 把标准出错追加到文件中

cmd < file1 > file2 把输入输出都定向到文件里

cmd < &fd 把文件描述符fd作为标准输入

cmd > &fd 把文件描述符fd作为标准输出

cmd < &- 关闭标准输入

# 重定向
lihoon@lihoon:~/code/Linux_shell$ date > file1
lihoon@lihoon:~/code/Linux_shell$ cat file1
2020年 08月 09日 星期日 22:23:09 CST

# 追加重定向
lihoon@lihoon:~/code/Linux_shell$ ls >> file1
lihoon@lihoon:~/code/Linux_shell$ cat file1
2020年 08月 09日 星期日 22:23:09 CST
argv.sh
a.txt
command.sh
file1
for.sh
f.sh
note.txt
out
sample.sh
shell笔记1.md
Shell笔记2.md
Shell笔记3.md
temp
temp.sh
temp.txt
while.sh

# 标准错误重定向
lihoon@lihoon:~/code/Linux_shell$ date -t > file1 2>&1
lihoon@lihoon:~/code/Linux_shell$ cat file1 
date: 不适用的选项 -- t
Try 'date --help' for more information.

# 输入输出都重定向
lihoon@lihoon:~/code/Linux_shell$ cat < file1 > file2
lihoon@lihoon:~/code/Linux_shell$ cat file2
date: 不适用的选项 -- t
Try 'date --help' for more information.

安得广厦千万间

 类似资料: