微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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://www.jb51.cc/article/p-aczwswlg-bpy.html

运行一个简单的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"  三个参数

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

原文地址:https://www.jb51.cc/bash/391889.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐