没有学不会的技术
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
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.
安得广厦千万间