shell脚本学习第三天——特殊变量

一、位置变量:

$0 获取当前执行脚本的文件名,包括脚本路径。
$n 获取当前执行脚本的第n个参数,1~9,大于9,用{}括起来,比如:${10}。
$# 表示参数个数

seq 9|sed 's#[0-9]#$&#g'
seq -s " $" 1 10 | sed 's/1/$1/'

这里写图片描述
以上用两种方法用产生“$1 $2一直到$10 ”用到了一个函数seq,下面对这个函数进行介绍。

用法:seq [选项]… 尾数
 或:seq [选项]… 首数 尾数
 或:seq [选项]… 首数 增量 尾数
以指定增量从首数开始打印数字到尾数。

  • -f, –format=格式 使用printf 样式的浮点格式
  • -s, –separator=字符串 使用指定字符串分隔数字(默认使用:\n)
  • -w, –equal-width 在列前添加0 使得宽度相同
  • –help 显示此帮助信息并退出
  • –version 显示版本信息并退出

如果省略了首数或者增量,则默认其值为1,即使这样尾数仍小于首数。
首数、增量和尾数均以浮点数形式解释。当首数小于尾数时增量一般为正值,
相反在首数大于尾数时增量一般为负数。
指定的格式必须适用于显示”double”类型的参数;当首数、增量和尾数均为指定
精确度的定点十进制数时默认为”%.精确度f”,否则默认为”%g”。

$ seq 1000      #起始默认是 1,间隔默认也是1
$ seq 2 100     #从2打印到100,间隔默认是1
$ seq 1 3 10    #从1到10,间隔为3,结果是:1 4 7 10
$ seq -s " $" 1 10  #以 $作为分隔符打印1~10

关于sed函数的用法可参考 :
http://blog.csdn.net/qicheng777/article/details/70847365

运行一个简单的shell程序 来观察$0以及$#具体含义:
这里写图片描述


二、进程状态命令:

1、\$? 获取上一个指令的返回值。

一般用于判断上一个命令是否执行成功,如果成功为0。下面是$?的返回值:

返回值含义
0表示运行成功
2权限拒绝
1~125运行失败,脚本命令、系统命令错误或参数传递错误
126找到命令但是无法执行
127未找到要运行的命令
>128命令被系统强制结束

实例:

[yangni@centos6 shell]$ find -aa
find: unknown predicate `-aa'
[yangni@centos6 shell]$ echo $?  
1              //参数错误   

[yangni@centos6 shell]$ maek     
-bash: maek: command not found
[yangni@centos6 shell]$ echo $?
127            //命令未找到

[yangni@centos6 shell]$ ./a.sh
-bash: ./a.sh: Permission denied
[yangni@centos6 shell]$ echo $?
126            //找到命令,无法执行

[yangni@centos6 shell]$ ls
a.sh
[yangni@centos6 shell]$ echo $?
0              //成功执行返回0

2、$$ 获取当前shell进程号。

写一个死循环来测试:

#!/bin/bash
echo $$ > a.log 
while true
do
    uptime
    sleep 2
done

这里写图片描述


其他一些状态命令:

$! 执行上一个指令的PID
$_ 在之前执行的命令或脚本的最后一个参数
$* 将所有参数视为单个字符串
$@ 这个程序的所有参数,这是把参数传给其他程序的
   最佳方式

$*和$@的区别:

$* 将所有参数视为单个字符串
$@ 这个程序的所有参数,这是把参数传给其他程序的
最佳方式

如果带引号:
"$1$2$3" 单个参数

$@ 这个程序的所有参数,这是把参数传给其他程序的
   最佳方式
"$1" "$2" "$3"  三个参数

如果不加引号,打印出来就不一样

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目 录 第一部分 Linux 操作环境 第1章 Linux基础 1.1 登录Linux系统 1.2 Linx的shell 1.3 shell的一些基本命令 第2章 文本编辑 2.1 vi文本编辑器 2.2 emacs文本编辑器 第3章 Linux文件系统操作 3.1 文件类型 3.2 文件系统目录结构 3.3 目录操作的基本命令 3.4 文件操作的基本命令 3.5 显示字符串echo 3.6 命令行中使用扩展符 第4章 文件权限与文件共享 4.1 存取权限 4.2 改变文件的存取权限 4.3 特殊权限位SUID、SGID、Sticky 4.4 硬链接 4.5 符号链接 第5章 文件管理工具 5.1 正则表达式 5.2 排序文件 5.3 查找文件 5.4 搜索文件内容 5.5 命令记录 5.6 压缩文件、解压缩文件与打包文件 5.7 RPM包管理 第6章 Linux进程、管道和重定向 6.1 进程的属性 6.2 进程的终止 6.3 进程和作业控制 6.4 命令行中使用操作符 6.5 Linux系统启动和进程层次结构 6.6 系统启动和关机 6.7 输入、输出重定向 6.8 使用文件描述符 6.9 输入和输出重定向的组合使用 6.10 管道(pipe) 第7章 C语言开发工具 7.1 编写程序的工具 7.2 编C语言程序 7.3 make工具 7.4 gdb调试工具 第8章 Bourn Again Shell编程 8.1 bash脚本的建立和运行 8.2 shell变量 8.3 shell脚本位置参数的传递 8.4 控制结构语句 8.5 其他几个有用的语句 8.6 数值处理 8.7 数组 8.8 函数 8.9 here文档 8.10 exec命令 8.11 trap命令 8.12 调试脚本程序 第二部分 Linux 内核分析与实践 第9章 编译Linux内核 9.1 Linux内核 9.2 查找并且下载一份内核源代码 9.3 部署内核源代码 9.4 配置内核 9.5 编译内核和模块 9.6 了解Linux内核的启动 9.7 应用grub配置启动文件 9.8 编写制作Linux启动盘的shell脚本程序 9.9 Linux源程序的目录分布 9.10 学习Linux的常用工具 9.11 查看Linux内核状况 9.12 编程序检查系统状况 9.13 Linux编程环境 第10章 系统调用 10.1 一个简单的例子 10.2 系统调用基础知识 第11章 进程创建 11.1 进程是什么 11.2 进程的产生 11.3 进程的消亡 / 退出 11.4 实验1 11.5 实验2 11.6 实验3 第12章 /proc文件系统 12.1 /proc文件系统 12.2 现有proc文件系统中各个文件的含义 12.3 怎样使用/proc文件系统 12.4 seq file 12.5 proc文件系统的内部实现机制 12.6 实验一:使用proc文件系统的一个简单例子 12.7 实验二:利用/proc文件系统显示缺页状态 12.8 实验三:seq file使用例子 第13章 内核模块 13.1 什么是内核模块 13.2 模块实现机制 13.3 使用内核模块 13.4 实例 第14章 内存管理 14.1 虚拟内存管理 14.2 Linux虚拟内存管理 14.3 实例 14.4 综合实验的原理 14.5 综合实验的实施 第15章 内核时钟与定时器 15.1 关于时钟和定时器 15.2 Linux系统时钟 15.3 Linux系统定时器 15.4 时钟命令 15.5 实验一:一个应用定时器的简单例子 15.6 实验二:统计关于进程的时间 15.7 实验三:更进一步的进程时间统计 第16章 共享内存 16.1 进程间通信和共享内存 16.2 共享内存的API 16.3 共享内存在Linux中的实现 第17章 同步机制 17.1 同步机制 17.2 Linux中几种同步机制的实现 17.3 设计我们自己的同步机制 第18章 文件系统 18.1 文件系统基本概念 18.2 文件系统的抽象 18.3 VFS文件系统 18.4 ext2文件系统 18.5 对文件的操作 18.6 块读写与页缓存 18.7 本章总结 18.8 实验:添加一个文件系统 18.9 附录:优秀的日志文件系统——ext3
书中的代码按章存放,如第1章所使用的代码放在codes文件夹的01文件夹下,依此类推。 代码的运行的前提条件: 1.安装j2eesdk-1_4_02_2005Q2-windows-ml.exe,安装完成后,添加CLASSPATH环境变量,该环境变量的值为.;%JAVA_HOME%/lib/tools.jar;;%JAVA_HOME%/lib/dt.jar;%J2EE_HOME%/lib/j2ee.jar。如果为了可以编译和运行Java程序,还应该在PATH环境变量中增加%JAVA_HOME%/bin。其中JAVA_HOME代表JDK(不是JRE,不是J2EE)的安装路径;J2EE_HOME指J2EE SDK安装路径——在系统中增加JAVA_HOME和J2EE_HOME两个环境变量。 2.保证在d:盘根路径下安装Apache的Tomcat 5.5.20,不要使用安装文件安装,而是采用解压缩的安装方式。即:Tomcat的安装路径为d:\tomcat5520,文件夹的路径、名字都不要改变。 3.安装Ant1.7.0。将下载的Ant压缩文件解压缩到任意路径,然后增加ANT_HOME的环境变量,让变量的值为Ant的解压缩路径。并在PATH环境变量中增加%ANT_HOME%/bin环境变量。 4.安装MySQL 5.0或更高版本,安装MysSQL时选择GBK的编码方式。 5.安装Eclipse 3.2,并安装MyEclipse 5.0插件。 代码的运行,分成如下4种情形: 1. 独立应用程序的代码中都包括build.xml文件,在Dos或Shell下进入build.xml文件所在路径,执行如下命令: ant build -- 编译程序 ant run --运行程序 2. 对于Web应用,将该应用复制到%TOMCAT_HOME%/webapps路径下,然后进入build.xml所在路径,执行如下命令: ant build -- 编译应用 启动Tomcat服务器,使用浏览器即可访问该应用。 3. 对于Eclipse项目文件,导入Eclipse开发工具即可。 4. 对于后面的2个案例,请参看每个案例下的readme.txt。 注意:代码中有大量代码需要连接数据库,读者应修改数据库URL以及用户名、密码,让这些代码与读者运行环境一致。如果项目下有SQL脚本,导入SQL脚本即可;如果没有SQL脚本,系统将在运行时自动建表,读者只需创建对应数据库即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值