(031) Linux之shell位置参数

十年运维系列之基础篇 - Linux

作者:曾林

联系:[email protected]

网站:www.jplatformx.com

版权:文章未经同意请勿转载


一、引言

  之前我们一直没有涉及程序接收和处理命令行选项以及参数的能力。本章节将讲述允许程序访问命令行内容的shell功能。

二、访问命令行

  shell提供了一组名为位置参数的变量,用于储存命令行中的关键字,这些变量分别命令为0~9。可以通过以下方法展示这些变量。

 1 #!/bin/bash
 2
 3 # posit-param: script to view command line parameters
 4
 5 echo "
 6 \$0 = $0
 7 \$1 = $1
 8 \$2 = $2
 9 \$3 = $3
10 \$4 = $4
11 \$5 = $5
12 \$6 = $6
13 \$7 = $7
14 \$8 = $8
15 \$9 = $9
16 "

  这个简单的脚本展示了从变量$0到$9的值。在没有任何命令行参数的情形下执行此脚本结果如下所示:

  即便没有提供任何实参,变量$0总是会储存有命令行显示的第一项数据,也就是所执行程序所在的路径名。现在让我们看看,看一下提供实参情形下的程序执行结果。

  注意,使用参数扩展技术,用户实际可以获取多于9个的参数。为标明一个大于9的数字,将数字用大括号括起来,例如${10}, ${11}, ${888}等。

三、确定实参的数目

  shell还提供了变量$#以给出命令行参数的数目。如下代码所示:

#!/bin/bash

# posit-param: script to view command line parameters

echo "Number of arguments: $#"

echo "
\$0 = $0
\$1 = $1
\$2 = $2
\$3 = $3
\$4 = $4
\$5 = $5
\$6 = $6
\$7 = $7
\$8 = $8
\$9 = $9
"

  以上程序运行结果如下所示:

四、shift——处理大量的实参

  但是如果给程序提供大量的实参会发生什么呢?如下所示:

  在本例中,通配符“*”扩展为26个实参。怎么样才可以处理这么多参数呢?shell提供了一种略显笨拙的处理方法。每次执行shift命令后,所有参数的值均“下移一位”。实际上,通过shift命令我们就可以只处理一个参数($0之外的一个参数,$0值恒定)而完成全部程序任务。如下程序:

#!/bin/bash

# shift.sh: script to display all arguments

count=1

while [[ $# > 0 ]]; do
        echo "Argument $count = $1"
        count=$((count + 1))
        shift
done

  每当执行一次shift命令时,变量$2的值就赋值给$1,而$3的值则赋给变量$2,依次类推。变量$#的值同时减去1。故以上代码的执行结果如下图所示:

时间: 2024-10-03 21:53:38

(031) Linux之shell位置参数的相关文章

Linux下Shell编程

Linux的shell编程 1.什么是shell? 当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shell(外壳)的程序. shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动.挂起.停止甚至是编写一些程序.一般的Linux系统都将bash作为默认的shell. 2.几种流行的shell 目前流行的shell有ash.bash.ksh.csh.zsh等,可以用下面的命令来查看she

linux下shell脚本执行方法及exec和source命令

exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两类:外部命令和内部命令.外部命令是通过系统调用或独立的程序实现的,如sed.awk等等.内部命令是由特殊的文件格式(.def)所实现,如cd.history.exec等等. 在说明exe和source的区别之前,先说明一下fork的概念. fork是linux的系统调用,用来创建子进程(child

Linux系统shell脚本编程——生产实战案例

Linux系统shell脚本编程--生产实战案例     在日常的生产环境中,可能会遇到需要批量检查内网目前在线的主机IP地址有哪些,还可能需要检查这些在线的主机哪些端口是开放状态,因此依靠手工来检查是可以实现,但比较费时费力,所以需要结合shell脚本来实现批量检查的功能,那么今天就来做个小小的实验. 1.开发脚本前准备 一般大家都知道,测试主机是否在线,常用的命令无非就是ping.nmap,因此,首先找一个地址来测试下ping命令的效果 [[email protected] scripts]

Linux/Unix shell sql 之间传递变量

灵活结合Linux/Unix Shell 与SQL 之间的变量传输,极大程度的提高了DBA的工作效率,本文针对Linux/Unix shell sql 之间传递变量给出几个简单的示例以供参考. Linux/Unix 下调用SQL,RAMN 请参考:Linux/Unix shell 脚本中调用SQL,RMAN脚本 一.示例 [python] view plain copy print? 1.shell变量接受sql返回值之方式一 [email protected]:~> more ./retval

Linux/Unix shell 监控Oracle告警日志(monitor alter log file)

使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linux 下使用 shell 脚本来监控 Oracle 告警日志(monitor alter log file). Linux Shell的相关参考:        Linux/Unix shell 脚本中调用SQL,RMAN脚本        Linux/Unix shell sql 之间传递变量   

Linux学习 -- Shell基础 -- 概述

Shell是什么? 命令解释器 编程语言 Linux支持的Shell类型 cat /etc/shells 主要学习 bash 脚本执行方式 echo echo -e 单引号 -- 原始字符串  双引号 -- 支持转义字符串 \e[1;31m xxx  开启颜色 \e[0m    关闭颜色 首行:#!/bin/bash #写好注释 执行方式: 方式1 sh xxx.sh 方式2 chmod 755 xxx.sh  ./xxx.sh 或 绝对路径 Linux学习 -- Shell基础 -- 概述

Linux修改Shell命令提示符及颜色

Linux修改Shell命令提示符及颜色 1. Linux登录过程中加载配置文件顺序: /etc/profile → /etc/profile.d/*.sh → ~/.bash_profile → ~/.bashrc → [/etc/bashrc] 可查看默认的~/.bashrc文件如下: [root@~/wade/codeReview/redis-2.8.17] cat ~/.bashrc # .bashrc   # User specific aliases and functions  

Linux的shell终端常用快捷键大全

在日常工作中,许多事情要经常与电脑打交道,特别是高频率地使用一些专业性的软件,或者是玩一些键盘流性质的游戏,就应该熟知常用的快捷键,这样玩起来不仅高效,而且略显专业性. 对于某些IT工作者来说,Linux的shell终端是一个经常要用到的工具,如果能够熟练使用快捷键,做起事情来且不事半功倍. 下面列举一些shell终端常用的快捷键,它们一般是Shift.Ctrl.Alt键与其它按键的组合键,这些快捷键都在Ubuntu/GNOME上做过测试,可以正常使用. 1. 设置快捷键 快捷键设置可以打开sh

Linux使用shell自动切换网关

编写名为auto_change_gw.sh的脚本,用来自动切换主机网关,相关说明如下: 1)有2个可用的网关地址,分别是主网关192.168.10.254和备用网关192.168.10.253,当前使用的默认网关是192.168.10.254: 2)若当前使用的网关地址192.168.10.254出现问题,自动把网关地址切换为192.168.10.253: 3)当网关地址192.168.10.254能正常工作后,当前主机再把网关地址切换到192.168.10.254. 讲下思路: 1.先用whi