首页 > 系统相关 >shell中的变量

shell中的变量

时间:2023-02-23 14:22:06浏览次数:39  
标签:脚本 shell 变量 echo sh name

Shell中变量命名法则

  1. 不能使程序中的保留字:例如if, for
  2. 只能使用数字、字母及下划线,且不能以数字开头
  3. 见名知义
  4. 统一命名规则:驼峰命名法

Shell中命名建议规则

  1. 变量名大写
  2. 局部变量小写
  3. 函数名小写
  4. 用英文名字,并体现出实际作用

bash中变量的种类

根据变量的生效范围等标准划分下面变量类型

局部变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效
环境变量:生效范围为当前shell进程及其子进程
本地变量:生效范围为当前shell进程中某代码片断,通常指函数
位置变量:$1, \(2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数 特殊变量:\)?, $0, $*, $@, \(#,\)$

局部变量

变量赋值:name=‘value’
可以使用引用value
(1) 可以是直接字串:name=“root"
(2) 变量引用:name="\(USER" (3) 命令引用:name=`COMMAND` name=\)(COMMAND)
变量引用:${name} 或者 $name
" " 弱引用,其中的变量引用会被替换为变量值
' ' 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
显示已定义的所有变量:set
删除变量:unset name

环境变量

变量声明、赋值:
export name=VALUE
declare -x name=VALUE
变量引用:
$name, ${name}
显示所有环境变量:
env
printenv
export
declare -x
删除变量:
unset name

PS1和PS2
提示符变量,用于设置提示符格式
PS1是用于设置一级Shell提示符的环境变量,也称为主提示符字符串,即改变: [root @jselab ~]#
PS1变量是[\u@\h \W]\$\u\h\W\$表示了特定含义,\u表示当前用户名,\h表示表示主机名,\W表示当前目录名,如果是root用户,\$表示#号,其他用户,\$则表示$号

bash内建的环境变量

PATH
SHELL
USER
UID
HOME
PWD
SHLVL
LANG
MAIL
HOSTNAME
HISTSIZE
_ 下划线

只读和位置变量

只读变量:只能声明,但不能修改和删除
声明只读变量:
readonly name
declare -r name
查看只读变量:
readonly -p
位置变量:在脚本代码中调用通过命令行传递给脚本的参数
$1, $2, ... 对应第1、第2等参数,shift [n]换位置
$0 命令本身
$* 传递给脚本的所有参数,全部参数合为一个字符串
$@ 传递给脚本的所有参数,每个参数为独立字符串
$# 传递给脚本的参数的个数
注意:$@ $* 只在被双引号包起来的时候才会有差异

进程状态相关

  • $? 表示上一条命令执行后的返回值

  • \[ 当前进程的进程号 \]

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

    例子:mytest1.sh

set -- 清空所有位置变量

vim /data/1.sh
#!/bin/bash
echo '第1个变量是'$1
echo '第2个变量是'$2
echo '第3个变量是'$3
echo '所有的变量为'$*
echo '所有的变量为'$@
echo '总共有'$#'个变量'
echo '本脚本是'`basename $0`

chmod +x /data/1.sh

1.sh a b c
第1个变量是a
第2个变量是b
第3个变量是c
所有的变量为a b c
所有的变量为a b c
总共有3个变量
本脚本是1.sh

垃圾箱脚本

vim rm.sh
mv -f $@ /data/null/
echo -e $@'已删除,可在\033[1;31m/data/null\033[0m中恢复'

declare

内置命令 declare 可用来声明变量。

declare [选项] variable[=value]

选项 含义
-r 将变量设为只读 (readonly)
-x 将变量输出到子shell中(export 为全局变量)
-i 将变量设为整型 (integer)
-a 将变量设置为一个数组 (array)
-f 列出函数的名字和定义 (function)
-F 只列出函数名

退出状态

进程使用退出状态来报告成功或失败
0 代表成功,1-255代表失败
$? 变量保存最近的命令退出状态
例如:
ping -c1 -W1 hostdown &> /dev/null
echo $?

退出状态码

bash自定义退出状态码
exit [n]:自定义退出状态码
注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命
令后面的数字
注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执
行的最后一条命令的状态码`

常见的返回状态码

  • 0:
    执行正确
  • 1:
    通用错误
  • 126:
    命令或脚本没有执行权限
  • 127:
    命令没找到
$ echo $$    # 显示当前进程的 PID
9245
$ echo $?    # 显示在此之前执行的命令的返回值
0
$ bash       # 调用子Shell
$ echo $$    # 显示当前进程的 PID
9474
$ exit 1     # 指定返回值并返回父Shell
$ echo $?    # 显示上一个Shell/脚本的返回值
1
$ list       # 执行不存在的命令
bash: list: command not found
$ echo $?
127
$ touch bbb.sh
$ ./bbb.sh   # 执行不具有执行权限的命令
bash: ./bbb.sh: Permission denied
$ echo $?
126

标签:脚本,shell,变量,echo,sh,name
From: https://www.cnblogs.com/guangdelw/p/17147810.html

相关文章

  • JavaScript 字面量和变量
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> /* *字面量,都是一些不可改变的值 * ......
  • A-PlayBook变量
    变量名:仅能由字母、数字和下划线组成,且只能以字母开头变量来源:1ansiblesetupfacts远程主机的所有变量都可直接调用2在/etc/ansible/hosts中定义3通过命令行指定变......
  • PowerShell 调用接口插入模拟数据
       functioninsertUser($i=2){$str="1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"#字符串#echo$str.ToCharArray()......
  • XShell或Xftp连接不上Ubuntu解决方案
    查看ssh是否开启ps-e|grepssh如果只有ssh-agent表示还没启动开启openssh-serversudoapt-getinstallopenssh-server再次查看如果显示sshd则说明已启动成功......
  • 红帽认证RedHat-RHCSA shell的基本应用
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操......
  • shell getopts 的使用模板
    demo1#!/bin/bashfunctionusage(){echo"Usage:$0-sFUNCTION-nNAME"}whilegetopts":s:n:"opt;docase${opt}ins)func=$OPTARG......
  • xshell使用秘钥ssh到自己的云服务器
    首先新建会话如果没有想要指定ssh到某个端口,就是22端口(ssh默认端口)文件->打开点击刚刚创建的会话myserver1输入要登录的用户名接下来可以1.使用密码登录2.使用公......
  • shell常用操作
    多行注释::<<EOF开头EOF结束字符串name="sfsf"echo"hello,${name}"#可以无引号,单引号双引号echo-e"YES\nNo"#开启转义printf"%d%s\n"1"abc"#格式只指定......
  • 【杂谈】对随机变量、事件的独立与依赖、期望的线性性的深入探讨
    定义\(e\)为一个事件/样本点,其发生的概率为\(P(e)\)。定义样本空间/基本事件空间为所有的可能事件/样本点的集合。随机变量定义为一个从样本空间到实数集的一......
  • Java数据类型,变量命名的标准 (AJCG),分支和循环,文档注释的要求
    Java数据类型,变量,分支和循环Java中的八大基本数据类型数据类型占用字节数数据范围byte1B-128~127short2B-32768~32767int4B-2^31~2^31-1......