文档章节

shell编程基础(三): 位置参数与shell脚本的输入输出

o
 osc_odyg6b92
发布于 2018/07/13 16:00
字数 1084
阅读 8
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

一、位置参数和特殊变量

有很多特殊变量是被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文件里

 

 

o
粉丝 1
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
Flappy Bird(安卓版)逆向分析(一)

更改每过一关的增长分数 反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹 方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/at...

enimey
2014/03/04
5.9K
18
【opencv】图形的绘制

1.矩形图像的绘制: 原函数:void cvRectangle(CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1, int line_type=8,int shift=0) img就是需要绘制的图像 pt1 and pt......

其实我是兔子
2014/10/08
1.1K
1
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22
Nutch学习笔记4-Nutch 1.7 的 索引篇 ElasticSearch

上一篇讲解了爬取和分析的流程,很重要的收获就是: 解析过程中,会根据页面的ContentType获得一系列的注册解析器, 依次调用每个解析器,当其中一个解析成功后就返回,否则继续执行下一个解...

强子哥哥
2014/06/26
712
0

没有更多内容

加载失败,请刷新页面

加载更多

Vim清除最后一个搜索突出显示 - Vim clear last search highlighting

问题: Want to improve this post? 想要改善这篇文章吗? Provide detailed answers to this question, including citations and an explanation of why your answer is correct. 提供此问题......

技术盛宴
45分钟前
13
0
原子属性和非原子属性有什么区别? - What's the difference between the atomic and nonatomic attributes?

问题: What do atomic and nonatomic mean in property declarations? 属性声明中atomic和nonatomic是什么意思? @property(nonatomic, retain) UITextField *userName;@property(atomic, ......

fyin1314
今天
7
0
马化腾每天刷 Leetcode?代码你打算写到几岁?

本文作者:o****0 前几天,一张未证真伪的截图流传,图中显示马化腾几乎每天都会在 Leetcode 上提交代码。 截图还贴出一个 Leetcode 账户地址。该地址的头像已从马化腾的照片换成腾讯 logo,...

百度开发者中心
前天
13
0
滴滴 3000+ Kylin Cube 背后的实践经验揭秘

本次分享主要有三个部分:Kylin 在滴滴的整体应用、架构的实践经验、滴滴全局字典最新版本的实现以及 Kylin 最新实时 OLAP 探索经验分享。 Kylin 在滴滴的应用&架构 Kylin 在滴滴的三类应用场...

浪尖聊大数据
昨天
9
0
ssh“权限太开放”错误 - ssh “permissions are too open” error

问题: I had a problem with my mac where I couldn't save any kind of file on the disk anymore. 我的Mac出现问题,无法再在磁盘上保存任何类型的文件。 I had to reboot OSX lion and r......

javail
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部