首页 > 系统相关 >Shell变量_特殊变量

Shell变量_特殊变量

时间:2023-10-09 17:45:48浏览次数:32  
标签:tmp 特殊 变量 sh echo Shell 参数 root localhost

特殊变量

shell的特殊变量,用在如脚本,函数传递参数使用,有如下的特殊的,位置参数变量

  • $0 获取shell脚本文件名,以及脚本路径
  • $n 获取shell脚本的第n个参数,n在1-9之间,如$1,$9,大于9则需要加大括号 ${10},参数空格隔开
  • $# 获取执行的shell脚本后面的参数总个数
  • $* 获取shell脚本所有参数,加上引号“$*”作为一个整体,
  • $@ 获取shell脚本所有参数作 把每个参数区分对待,
  2 #
  3 #
  4 #author    cread by Mrxu
  5 #function  特殊变量位置参数举例
  6 echo "你录入的参数总个数$#"
  7 echo ‘'参数列表以$@接受'
  8 for var in $@
  9 do
 10  echo "$var" 
 11 done
 12 echo ‘'参数列表以$*接受'
 13 for var in $*
 14 do
 15  echo "$var" 
 16 done
 17 echo ‘'参数列表以"$@"接受'
 18 for var in "$@"
 19 do
 20  echo "$var" 
 21 done
 22 echo ‘'参数列表以"$*"接受'
 23 for var in "$*"
 24 do
 25  echo "$var" 
 26 done
[root@localhost tmp]# sh MyVar.sh  1 2 3
你录入的参数总个数3
‘参数列表以$@接受
1
2
3
‘参数列表以$*接受
1
2
3
‘参数列表以"$@"接受
1
2
3
‘参数列表以"$*"接受
1 2 3
[root@localhost tmp]# 

注意:$*和$@的区别

当$*和$@不被引号""时,他们之间没区别,都是将接收的参数看着一份数据,彼此以空格分隔

但是当他们被""时,就存在区别

"$*" 会将所有的参数从整体上看做一份数据,

"$@"任然将每个参数都看着一份数据,彼此独立

特殊状态变量
  • $? 上一次命令执行状态返回值, 0正确,非0失败

  • $! 上一次 后台的进程pid

  • $_ 在此之前执行的命令,最后一个参数

  • $$ 当前shell 进程号pid

#查看帮助文档特殊变量 通过man 手册查询
[root@localhost ~]# man bash
/Speical Parameters  #搜索关键字

脚本控制返回值的玩法,脚本返回值,学习shell函数编程之后,才能彻底立即。这个脚本执行完毕了,会返回一个数字id,称为返回值。

#案例:$#和$?案例 脚本控制返回值的玩法1.
[root@localhost tmp]# vim  demo1.sh
#!/bin/bash
 [ $# -ne 2 ] && {
 echo "请传入正确的参数个数!"
 exit 119  #终止程序允许,且返回119状态玛,提供给当前shell的$?变量,若函数里可以return 119
}
 echo "传入参数个数ok!"
######执行
[root@localhost tmp]# sh demo1.sh 2 5 6 
请传入正确的参数个数!
[root@localhost tmp]# $?
bash: 119: 未找到命令...
[root@localhost tmp]# sh demo1.sh 2 5 
传入参数个数ok!
[root@localhost tmp]# $?
bash: 0: 未找到命令...
##案例2:
[root@localhost tmp]# nohup ping www.baidu.com & 1> /dev/null
[1] 4027
[root@localhost tmp]# nohup: 忽略输入并把输出追加到"nohup.out"
ps -ef|grep ping
root      2376  1987  0 14:32 ?        00:00:00 /usr/libexec/gsd-housekeeping
root      4027  2894  0 15:31 pts/0    00:00:00 ping www.baidu.com
root      4035  2894  0 15:31 pts/0    00:00:00 grep --color=auto ping
[root@localhost tmp]# echo $!
4027
[root@localhost tmp]# 

###案例3:$$当前进程编号;由下案例也可看出来,用.和sourc是用的当前shell,相当/觉得路径和sh调用脚本都是另开一个新的shell进程
#!/bin/bash
 [ $# -ne 2 ] && {
 echo "请传入正确的参数个数!"
 exit 119  #终止程序允许,且返回119状态玛,提供给当前shell的$?变量,若函数里可以return 119
}
 echo "传入参数个数ok!"
 echo "当前的脚本id是:$$"

[root@localhost tmp]# 
[root@localhost tmp]# sh demo1.sh  3 3
传入参数个数ok!
当前的脚本id是:4316
[root@localhost tmp]# echo $$   
2894
[root@localhost tmp]# . demo1.sh 3 3 
传入参数个数ok!
当前的脚本id是:2894
[root@localhost tmp]# source demo1.sh  3 3
传入参数个数ok!
当前的脚本id是:2894
[root@localhost tmp]# pwd
/root/tmp
[root@localhost tmp]# /root/tmp/demo1.sh  3 3
传入参数个数ok!
当前的脚本id是:4378
[root@localhost tmp]#  sh demo1.sh  3 3
传入参数个数ok!
当前的脚本id是:4395
[root@localhost tmp]# sh demo1.sh  3 5 6
请传入正确的参数个数
[root@localhost tmp]# echo $_
6
[root@localhost tmp]# 

标签:tmp,特殊,变量,sh,echo,Shell,参数,root,localhost
From: https://www.cnblogs.com/xjianbing/p/17752339.html

相关文章

  • Shell子串_变量子串的语法介绍
    变量子串的语法介绍name="Mrxujbing" #该变量的值,有索引是从0,1,2,3,4...${变量} 返回变量值${#name} 返回变量长度${变量:start} 返回变量start数值之后的字符串,且包含start的数字(start值就是索引值)${变量:start:length} 提取start之后的length限制的字符,例......
  • Java-JDK8的下载安装及环境变量配置
    JDK下载网址:JavaDownloads|Oracle(现在需要注册登陆后才可以下载JDK安装包)——有安装包最好!!!进入网址找到Java8==>选择windows视窗==>选择X64,(X64为64位系统,X86为32为系统)。一、下载JDK安装包。   1.双击打开安装包,选择“下一步”。2.选择要安装的目录和组......
  • 【2023年10月09日】STF61_LINUX_SHELL
     STF61_LINUX_SHELL(上午)1. 什么是shell?shell就是一个用C语言编写的程序,是用户使用linux的桥梁。shell既是一种命令语言,也是一种程序设计语言2. 什么是shellscript?利用shell的功能所写的一个“程序”,这个程序是使用纯文本文档,将一些shell的语法与命令写在命令。搭......
  • STF61_LINUX_SHELL(上午)
     STF61_LINUX_SHELL(上午)1. 什么是shell?shell就是一个用C语言编写的程序,是用户使用linux的桥梁。shell既是一种命令语言,也是一种程序设计语言2. 什么是shellscript?利用shell的功能所写的一个“程序”,这个程序是使用纯文本文档,将一些shell的语法与命令写在命令。搭......
  • shell脚本中的多行注释
     001、[root@pc1test01]#lsa.sh[root@pc1test01]#cata.sh##测试脚本#!/bin/bash:"##冒号和双引号之间有一个空格(也可以是单引号)xxxxxxxyyyyyyyyyyy##注释内容zzzzzzzz"((sum=8+9+......
  • arm32_shellcode
    arm32_shellcode题目文件build.sh#!/bin/basharm-linux-gnueabi-gcc-g-static-Iinclude-ochalchal.clibcapstone.achal.c#include<stdio.h>#include<string.h>#include<sys/mman.h>#include<stdlib.h>#include<ctype.h>#......
  • shell 实现harbor 指定仓库镜像tags 查询
    1.需求背景1.1容器发布ci成功以后我们希望CD时候可以选择相关镜像1.2统计指定仓库镜像有多少个版本2.shell代码#!/bin/bash#harbor关键环境变量HARBOR_URL=""USERNAME=""PASSWORD=""PAGE_SIZE=50imges_head=$(echo"$HARBOR_URL"|awk-F//'{print$2}')pr......
  • Python入门示例系列04 使用 IDLE Shell
    启动IDLEShell安装Python之后,点击开始菜单,找到P开头的菜单项,点开某个版本的Python,如下图:  点击IDLE    输入代码之后按回车Enter可以运行代码【上图,输入x=1+2,然后按回车,即开始执行】输入变量(对象)名可以查看值【上图,输入x,可以查看x的值】Alt+P上一条代码(st......
  • 密码协议学习笔记(8.16):几种特殊的秘密分享体系
    已知两个秘密的碎片,计算秘密的乘积的碎片:已知两个秘密$\alpha_0,\beta_0$分别实现了门限值为$t$的分享记$$f_{\alpha}(x)=\alpha_0+\alpha_1x+\cdots+\alpha_{t-1}x^{t-1}$$$$f_{\beta}(x)=\beta_0+\beta_1x+\cdots+\beta_{t-1}x^{t-1}$$秘密碎片为$$A_1=f_{\alpha}(1),A_2=......
  • C#学习笔记--变量类型的转换
    变量类型的转化:转换原则同类型的大的可以装小的,小类型的装大的就需要强制转换。隐式转换:同种类型的转换://有符号long——>int——>short——>sbytelongl=1;inti=1;shorts=1;sbytesb=1;//隐式转换int隐式转换成了long//可以用大范围装小范围的类型(隐......