shell编程基础(三): 位置参数与shell脚本的输入输出
一、位置参数和特殊变量
有很多特殊变量是被Shell自动赋值的,我们已经遇到了$?和$1,现在总结一下:
常用的位置参数和特殊变量:
$0 相当于C语言main函数的argv[0]
$1、$2... 这些称为位置参数(Positional Parameter),相当于C语言main函数的argv[1]、argv[2]...
$# 相当于C语言main函数的argc - 1,表示输入参数的个数,注意这里的#后面不表示注释
$@ 表示参数列表"$1" "$2" ...,例如可以用在for循环中的in后面。
$* 表示参数列表"$1" "$2" ...,同上
$? 上一条命令的Exit Status
$$ 当前进程号
位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1。例如:
[root@VM_0_5_centos test]# vi tsite.sh
查看脚本内容
[root@VM_0_5_centos test]# cat tsite.sh
#!/bin/sh
echo '$0相当于C语言main函数的argv[0]'
echo "The program $0 is now running"
echo '-------------------------'
echo "The first parameter is --> $1"
echo "The second parameter is --> $2"
echo '-------------------------'
echo "The parameter list is --> $@"
echo '-------------------------'
echo 'shift命令默认左移一位'
shift
echo "The first parameter is --> $1"
echo "The second parameter is --> $2"
echo "The parameter list is --> $@"
echo '-------------------------'
echo "当前进程号 --> $$"
echo "当前输入参数个数 --> $#"
提升脚本权限
[root@VM_0_5_centos test]# chmod a+w tsite.sh
[root@VM_0_5_centos test]# ls
$ $ mmzs tsite.sh
运行测试脚本
[root@VM_0_5_centos test]# sh tsite.sh aa bb cc dd ee
$0相当于C语言main函数的argv[0]
The program tsite.sh is now running
-------------------------
The first parameter is --> aa
The second parameter is --> bb
-------------------------
The parameter list is --> aa bb cc dd ee
-------------------------
shift命令默认左移一位
The first parameter is --> bb
The second parameter is --> cc
The parameter list is --> bb cc dd ee
-------------------------
当前进程号 --> 6871
当前输入参数个数 --> 4
二、shell输入输出
1、echo
echo显示文本行或变量,或者把字符串输入到文件。
echo [option] string
-e 解析转义字符
-n 不回车换行。默认情况echo回显的内容后面跟一个回车换行。 [root@VM_0_5_centos test]# vi techo.sh
查看脚本内容
[root@VM_0_5_centos test]# cat techo.sh
#!/bin/sh
echo "hello\n\n"
echo -e "hello\n\n"
echo "hello"
echo -n "hello"
运行测试脚本
[root@VM_0_5_centos test]# sh techo.sh
hello\n\n
hello hello
hello[root@VM_0_5_centos test]#
2、管道|
可以通过管道把一个命令的输出传递给另一个命令做输入。管道用竖线表示。
[root@VM_0_5_centos test]# cat techo.sh | more
#!/bin/sh
echo "hello\n\n"
echo -e "hello\n\n"
echo "hello"
echo -n "hello"
[root@VM_0_5_centos test]# ls -l | grep "t"
total 12
-rw-r--r-- 1 root root 0 Jul 12 14:50 $ $
drwxr-xr-x 2 root root 4096 Jul 12 15:26 mmzs
-rw-r--r-- 1 root root 77 Jul 13 11:24 techo.sh
-rw-rw-rw- 1 root root 559 Jul 13 10:54 tsite.sh
df -k | awk '{print $1}' | grep -v "文件系统"
df -k 查看磁盘空间,找到第一列,去除“文件系统”,并输出
[root@VM_0_5_centos test]# df -k Filesystem 1K-blocks Used Available Use% Mounted on /dev/vda1 51474024 8321872 40829692 17% / devtmpfs 932328 0 932328 0% /dev tmpfs 941808 24 941784 1% /dev/shm tmpfs 941808 556 941252 1% /run tmpfs 941808 0 941808 0% /sys/fs/cgroup tmpfs 188364 0 188364 0% /run/user/0
3、tee
tee命令把结果输出到标准输出,另一个副本输出到相应文件。
df -k | awk '{print $1}' | grep -v "文件系统" | tee a.txt
tee -a a.txt表示追加操作。
df -k | awk '{print $1}' | grep -v "文件系统" | tee -a a.txt
//将ls -l命令的结果输出到a.txt文件中
[root@VM_0_5_centos test]# ls -l | tee a.txt
4、文件重定向
概念理解:

cmd表示输入的命令
cmd > file 把标准输出重定向到新文件中
cmd >> file 追加
cmd > file 2>&1 标准出错2也重定向到标准输出1所指向的标准输出的file里
cmd >> file 2>&1 cmd < &fd 把文件描述符fd作为标准输入
cmd > &fd 把文件描述符fd作为标准输出 cmd < &- 关闭标准输入
例如:
cat 1.txt 相当于open,直接打开文件读取内容
cat < 1.txt 此时cat是去读标准输入,但是标准输入指向1.txt文件,所以cat就去读1.txt文件了 cmd < file1 > file2 输入定向到file1,输出定向到file2文件里
shell编程基础(三): 位置参数与shell脚本的输入输出的更多相关文章
- 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!
http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...
- 【shell编程基础0】bash shell编程的基本配置
前面一篇“shell编程之变量篇”主要讲述下shell编程的变量的基本知识:设置变量的方式,自定义变量和环境变量的差别,变量的替换.删除.测试等. 这一篇主要是讲述在bash shell下的一些基本配 ...
- 【转】Shell编程基础篇-下
[转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...
- 【转】Shell编程基础篇-上
[转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...
- shell编程基础(转载)
Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...
- 基于Linux系统的Shell编程-基础篇
1. Shell基础介绍 1.1 Shell编程的意义 为什么使用shell编程 节约时间 1.2 显示脚本执行过程 前面有+表示执行过的命令的 前面没有东西,表示输出到屏幕上的内容. [root@C ...
- centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课
centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobacku ...
- Linux学习之二十一-shell编程基础
Shell编程基础 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个 ...
- 7-1 shell编程基础之二
shell编程基础之二 算数运算 bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方),乘法符号有些场景中需要转义 实现算术运算: (1) let var=算 ...
随机推荐
- prim算法和克鲁斯卡尔算法
Prim 设图G=(V,E)是一个具有n个顶点的连通网,其生成树的顶点集合为U.首先把v0放入U,再在所有的u∈U,v∈V-U的边(u,v)∈E中找一条最小权值的边,加入生成树,并把该边的v加入U集合 ...
- .Net QQ互联教程
qq互联只需要备案即可申请,申请成功后可以到qq互联官网查看教程,本站开始想使用js的教程但是由于本站需要绑定本站的账号用js教程无法完成,所以使用原始的oauth2.0来完成. 申请qq互联接口 q ...
- scrum学习
一.关于Scrum 什么叫Scrum?Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发.Scrum包括了一系列实践和预定义角色的过程骨架.Scrum中的主要角色包括同项目经理类似的Scru ...
- Vue.js环境配置
一.安装node.js 自行下载安装 https://nodejs.org/en/ 二.查看版本,更新版本 查看node版本 node --version 查看npm版本 npm --version ...
- POJ3040--Allowance(贪心)
http://poj.org/problem?id=3040 思路: 输入时,如果有大于c的,直接把数量加到结果中,不把他加到数组中 把钱按面值排序 想取最大面额的钱,保证取到的钱小于等于c 然后取最 ...
- 【.NET Core项目实战-统一认证平台】第四章 网关篇-数据库存储配置(2)
[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我们介绍了如何扩展Ocelot网关,并实现数据库存储,然后测试了网关的路由功能,一切都是那么顺利,但是有一个问题未解决,就是如果网关 ...
- Java基础巩固——异常
基础回顾 什么是异常? 在Java程序运行时,常常会出现一些非正常的现象,这种情况称为运行错误.根据其性质可以分为错误和异常. Java程序中所有抛出的异常都必须从Throwable派生而来.类Thr ...
- 51nod OJ P1000 A+B
P1000 A+B OJ:51Nod 链接:"http://www.51nod.com/Challenge/Problem.html#!#problemId=1000" 题目描述: ...
- 1分钟快速制作漂亮的H5本地记事本
大家好,以前给大家分享过一个五步骤制作精美的HTML5时钟的文章,点击回顾<五步教你制作漂亮精致的HTML时钟>,还有<一分钟教你如何实现唯美的文字描边>:今天给大家分享一个用 ...
- h5面试题
一.匿名函数实现阶乘第一种写法: 43 > F = fun(Func, 1) -> 1;43 > (Func, N) -> N * Func(Func, N - 1) end. ...