热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux脚本参数传递参数个数,Shell编程一——变量及参数传递

Shell是一个用C语言编写的程序,通过Shell用户可以访问操作系统内核服务。Shell既是一种命令语言,又是一种程序设计语言。Shell编程跟jav

Shell是一个用C语言编写的程序,通过Shell用户可以访问操作系统内核服务。Shell既是一种命令语言,又是一种程序设计语言。

Shell编程跟java、php编程一样,需要有一个能编写代码的文本编辑器和一个能解释执行的脚本编辑器。

Linux中的Shell有很多种类,一个系统中可以存在多个shell,我们可以通过下面的命令进行查看。

cat /etc/shells

4b055e94ef8e

shell的类型

Bash由于易用和免费,在日常工作中被广泛使用。同时,Bash也是大多数Linux系统默认的Shell。这里我们介绍的就是

一、基本格式

使用vi编辑器创建一个文件hello.sh。

#! /bin/bash

echo "Hello World !"

“#!”是一个约定的标记,用来告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。

echo命令用于向窗口输出文本

Shell脚本的执行

chmod +x ./hello.sh #使脚本具有执行权限

./hello.sh #执行脚本

我们直接创建的hello.sh文件只具有可读的权限,如果要执行的话,我们还需要赋予它可执行的权限。

4b055e94ef8e

我们直接用hello.sh命令执行文件,Linux执行的时候会去PATH中寻找hello.sh,所以我们需要用./hello.sh

二、Shell变量

1、语法格式

变量=值,例如:name="zhangsan"

命名规则:

变量名、值和等号之间不能有空格

变量名首个字符必须为字母(a-z,A-Z)

变量名中间不能有空格,可以使用下划线(_)

不能使用标点符号

不能使用bash里的关键字(可用help命令查看保留关键字)

2、变量的使用

使用定义过的变量,只需要在变量名前加$。花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。

4b055e94ef8e

变量的使用

其他命令:

readonly variable_name #将变量定义为只读变量,只读变量不能被改变

unset variable_name #删除变量,但不能删除只读变量

3、变量的类型

局部变量:

局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量

环境变量

所有的程序,包括shell启动的程序,都能访问环境变量,有的程序需要环境变量来保证其正常运行。可以通过set命令查看当前环境变量。

shell变量:

shell 变量是由 shell 程序设置的特殊变量。shell 变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了 shell 的正常运行。

三、Shell参数传递

在执行Shell脚本的时候,可以向脚本传递参数。具体语法如下:

表达式

含义

$n

n代表一个数字,1为执行脚本的第一个参数,以此类推...只能表示第一个到第九个参数

${n}

表示第十个以后的参数

$()

代表当前脚本名称

$#

传递到脚本的参数个数

$*

以一个单字符串显示所有向脚本传递的参数

$$

脚本运行的当前进程ID号

$!

后台运行的最后一个进程的ID号

$@

与$*相同,但是使用时加引号,并在引号中返回每个参数

$?

显示最后命令的退出状态。0表示没有错误,其他任何职表明有错误

例如:

创建一个测试的test.sh文件

#! /bin/bash

echo "第一个参数为:$1";

echo "第十个参数为:$10";

echo "第十个参数为:${10}";

echo "参数的个数为:$#";

echo "传递的参数作为一个字符串显示:$*";

echo "脚本运行的当前进程ID:$$";

执行脚本:

chmod 777 ./test.sh

./test.sh 11 22 33 44 55 66 77 88 99 100 101

执行结果:

4b055e94ef8e

执行结果

“$*”和“$@”的区别

相同点:都表示传递给脚本的所有参数

不同点:

不被" "包含时,$*和$@都以$1 $2… $n 的形式组成参数列表。

被" "包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式组成一个整串;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的

形式组成一个参数列表



推荐阅读
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 树莓派Linux基础(一):查看文件系统的命令行操作
    本文介绍了在树莓派上通过SSH服务使用命令行查看文件系统的操作,包括cd命令用于变更目录、pwd命令用于显示当前目录位置、ls命令用于显示文件和目录列表。详细讲解了这些命令的使用方法和注意事项。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 本文总结了Linux下多线程执行shell脚本的4种方法,包括切换到工作目录执行、使用绝对路径执行、直接使用bash或sh执行。同时介绍了为什么需要加上"./"来执行脚本的原因。 ... [详细]
  • STM32与FPGA的对比及学习建议
    本文对比了野火STM32F103指南针板和Xilinx的PYNQ-Z2板(ZYNQ-7020),介绍了野火STM32F103指南针板的学习资料和讲解视频的详细程度,建议初学者学习野火的资料。同时,介绍了STM32开发所用的Keil程序和C指针的重要性。对于ZYNQ-7020的开发,提到了其自带的Linux、Ubuntu18.4系统以及使用SD卡烧入镜像的方法。 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有