未加星标

Shell编程之特殊变量的笔记小结

字体大小 | |
[系统(linux) 所属分类 系统(linux) | 发布者 店小二05 | 时间 | 作者 红领巾 ] 0人收藏点击收藏
$0 $# $n-->$[1..9] $* $@
1、在shell中存在着一些特殊而又重要的变如:$1 $0 $#,我们称为特殊的位置变量要从命令行,函数,脚本,等传递参数时,就需要在shell脚本中使用位置参数变量
$0:显示当前的脚本文件名,如果在执行脚本时添加了路径,那么全部都会输出
$n:获取当前执行的shell脚本的第n个参数值比如:[n=1..9],如果N大于9那么就要使用{}来定义 比如${10}
$#:获取当前shell脚本后面接的参数的个数
$*:获取当前脚本的参数,不加引号和$@是一样的 加了引号;例如"$*" 则表示单个字符串。相当于"$1 $2 $3"
$@:同样也是获取当前shell的参数,不加引号和$*是一样的,那么加了引号如:"$@" 表示将所有的参数视为不同独立的字符串,相当于"$1" "$2"..

总结:$*和$@不加双引号 是没有任何区别的,有双引号两者就有区别

1)$1 $2 特殊变量实战

[root@yankerp src]# cat test.sh #查看脚本的内容
#!/bin/bash
echo $1 ---<定义了$1
[root@yankerp src]# source test.sh yankai #执行的脚本的时候将yankai赋值给脚本中的1
yankai #输出yankai
[root@yankerp src]#
例2:

[root@yankerp src]# cat test.sh #脚本内容
#!/bin/bash
echo $1
[root@yankerp src]# source test.sh zhangsan lisi #zhansgan lisi是两个字符串以空格分割
zhangsan #只输出了zhangsan,因为脚本中只定义了$1
[root@yankerp src]#
例3:

[root@yankerp src]# cat test.sh #查看脚本的内容
#!/bin/bash
echo $1
[root@yankerp src]# source test.sh "zhangsan lisi" #加双引号表示一个字符串参数
zhangsan lisi #最后输出结果为zhangsan lisi
[root@yankerp src]#
例4:在脚本中添加$1 $2测试:

[root@yankerp src]# cat test.sh #查看脚本的内容
#!/bin/bash
echo $1 $2 定义了$1 $2
[root@yankerp src]# source test.sh zhangsan lisi #在执行脚本的时候定义了两个字符串
zhangsan lisi #说明 zhangsan赋值给了$1 lisi赋值给了$2 输出结果为 zhangsan lisi
[root@yankerp src]#
同时也可以这样加双引号 如下:

[root@yankerp src]# cat test.sh #查看脚本的内容
#!/bin/bash
echo $1 $2
[root@yankerp src]# source test.sh "zhangsan lisi" yankai #""表示一个字符串
zhangsan lisi yankai #输出结果
[root@yankerp src]#
2)当我们一个个的输入echo $1---15时会感觉很慢我们可以使用以下命令来接收命令传递的15个参数

[root@yankerp src]# echo \${1..15}
$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
将输出的内容导入到test.sh文件中

[root@yankerp src]# echo \${1..15} > test.sh
[root@yankerp src]# cat test.sh
$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
[root@yankerp src]#
我们在脚本第一行加入echo

echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
3)打印26个字母如下:

[root@yankerp src]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
传入26个字母a-z 作为26个参数

[root@yankerp src]# cat test.sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 #脚本内容
[root@yankerp src]# source test.sh {a..z} #传入26个字母
a b c d e f g h i a0 a1 a2 a3 a4 a5 #位置参数大于9后,输出的内容就不对了
[root@yankerp src]#
当位置参数大于9时 上面已经提到了我们可以使用{}来定义如下:

[root@yankerp src]# cat test.sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}
再次执行

[root@yankerp src]# source test.sh {a..z}
a b c d e f g h i j k l m n o
4)$0特殊变量实战

[root@yankerp src]# cat y.sh
#!/bin/bash
echo $0
当我们不带路径运行脚本,它会打印脚本的名称,如下:

[root@yankerp src]# sh y.sh
y.sh
当我们带绝对路径来执行脚本时,它会输出路径+脚本名

[root@yankerp src]# sh /usr/local/src/y.sh
/usr/local/src/y.sh
介绍dirname ---- basename

[root@yankerp src]# dirname /usr/local/src/y.sh
/usr/local/src
[root@yankerp src]# basename /usr/local/src/y.sh
y.sh
dirname功能:获取脚本的路径
basename:获取脚本的名称
例如:

[root@yankerp src]# cat y.sh
#!/bin/bash
dirname $0
basename $0
[root@yankerp src]# sh /usr/local/src/y.sh
/usr/local/src
y.sh
[root@yankerp src]#
5)$#特殊变量获取传参个数实践

[root@yankerp src]# cat test.sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 < 9个位置参数变量
echo $# <----加入$#
[root@yankerp src]# source test.sh {a..z} <传入26个字符
a b c d e f g h i -----<只接收9个变量
26 ----<传入26个字符。因此这里显示26
[root@yankerp src]#
实例1:条件表达式判断语句如下:

#!/bin/bash
[ $# -ne "2" ] && { #如果用户输入的传参个数不等于2
echo "请输出正确的数值" #那么输出此信息
exit 1 #随后退出脚本
}
echo "输入正确" #如果输入的传参个数是2 那么就输出此信息
运行脚本如下:

[root@yankerp src]# sh p.sh
请输出正确的数值
[root@yankerp src]# sh p.sh zhangsan lisi
输入正确
[root@yankerp src]#
IF语句判断如下:

#!/bin/bash
if [ $# -ne "2" ] -------如果输入的传参个数不是2
then ------那么
echo "/usr/local/src/ $0 请输入正确的值" --输出一个/usr/local---路径加$0 $0表示输出运行脚本的名称
else
echo "输入正确"
fi

执行如下:

[root@yankerp src]# sh p.sh
/usr/local/src/ p.sh 请输入正确的值
[root@yankerp src]# sh p.sh zhangsan lisi
输入正确
[root@yankerp src]#
Shell编程之特殊变量的笔记小结

$* $@后续再出!!!

二、shell进程中特殊状态变量
$?    $$(不常用)   $!(不常用)    $_(不常用)$$ 和 $!都是获取脚本进程号PID,但是有所不同这里不在演示
1、$?特殊变量实践

[root@yankerp ~]# pwd
/root
[root@yankerp ~]# echo $?
0
[root@yankerp ~]
当我们执行每一条命令结束后,echo $? 如果它输出0那么就代表成功

[root@yankerp ~]# sfkljlfsdfsdf
bash: sfkljlfsdfsdf: 未找到命令...
[root@yankerp ~]# echo $?
127
[root@yankerp ~]#
非0则代表失败。
案例:安装Apache判断是否安装成功

[root@yankerp ~]#yum install httpd -y
Shell编程之特殊变量的笔记小结
案例2:通过脚本控制命令及脚本执行返回值

#!/bin/bash
if [ "$#" -ne "3" ]
then
echo "/bin/bash $0" 请输出正确字符
exit 120 ---<如果以上不成立 并指定120值退出脚本
else
echo "输入正确"
fi
运行如下:

[root@yankerp ~]# sh k.sh
/bin/bash k.sh 请输出正确字符
[root@yankerp ~]# echo $?
120
[root@yankerp ~]#
[root@yankerp ~]# sh k.sh zhangsan lisi wangwu
输入正确
[root@yankerp ~]# echo $?
0
[root@yankerp ~]#
Shell编程之特殊变量的笔记小结
声明:以上文章是<<跟着老男孩学linux运维Shell编程实战>>第四章看完的总结;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。


您可能感兴趣的文章:Shell编程中的特殊变量之进程状态变量介绍Shell编程中的特殊变量之位置变量介绍

本文系统(linux)相关术语:linux系统 鸟哥的linux私房菜 linux命令大全 linux操作系统

主题: Linux变量
tags: root,yankerp,src,sh,echo,脚本,zhangsan,lisi,bash,bin,cat,local,usr,输出
分页:12
转载请注明
本文标题:Shell编程之特殊变量的笔记小结
本站链接:https://www.codesec.net/view/572351.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 系统(linux) | 评论(0) | 阅读(120)