查看: 1269|回复: 0
收起左侧

[教程经验] Shell脚本语法——位置参数和输入输出

Lihoon 2020-8-9 22:28:04 | 显示全部楼层 |阅读模式
邀请回答

马上注册,享受更多特权

您需要 登录 才可以下载或查看,没有帐号?立即注册   

x

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 &gt; file1
lihoon@lihoon:~/code/Linux_shell$ cat file1
2020年 08月 09日 星期日 22:23:09 CST

# 追加重定向
lihoon@lihoon:~/code/Linux_shell$ ls &gt;&gt; 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 &gt; file1 2&gt;&1
lihoon@lihoon:~/code/Linux_shell$ cat file1 
date: 不适用的选项 -- t
Try 'date --help' for more information.

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

已有 0 人打赏作者

回复 邀请回答送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册   

本版积分规则

有技术问题,就上汇川技术社区

INOVANCE汇川技术 公众号

扫码下载掌上汇川APP

全国服务热线:8:30-17:30

4000-300124

苏州地址:江苏省苏州市吴中区越溪友翔路16号

深圳地址:深圳市龙华新区观澜街道高新技术产业园汇川技术总部大厦

Copyright © 2003-2100 汇川技术 Powered by Discuz! X3.4 ( 苏ICP备12002088号 )
快速回复 返回列表 返回顶部