Linux命令备忘实例(2)——变量

1.设定规则

  • 变量的等号两边不能有空格符
  • 变量名称只能为数字或英文字母,不能以数字开头
  • 双引号内的变量可替换为其值,单引号内的变量为纯文本
  • 可以使用反引号`命令`或者$(命令)的方式将内部命令的返回值赋给变量
  • 变量扩增与赋值时,直接堆砌:$a=$a“ ”$b
  • 某个变量需要在其他子程序执行时使用,可以用export使变量变为环境变量
  • 大写字母变量为系统默认变量,自定义变量用小写
  • 取消变量使用:unset 变量名称
user@ubuntu:~$ 12n=123
12n=123: command not found
user@ubuntu:~$ n12=123
user@ubuntu:~$ n12=${n12}" "$n12; echo ${n12}
123 123

###使用命令的结果,可以赋值给变量,也可以直接使用到新的命令中
user@ubuntu:~$ cd /lib/modules/`uname -r`/kernel
user@ubuntu:~$ cd /lib/modules/$(uname -r)/kernel

user@ubuntu:~$ unset n12

变量的作用范围:自定义变量作用于当前shell,环境变量作用于当前及所有子程序。

2.环境变量

环境变量是未在当前进程中定义,从父进程中继承而来的变量。export用来设定环境变量。设定之后,从当前shell脚本执行的任何程序都会继承这个变量,可以按照需要,在应用程序中导出(export)特定的变量。默认情况下,提供了很多的环境变量可供使用。

1.env

列出目前shell环境下,与此中断进程相关的所有的环境变量及其内容:

user@ubuntu:~$ env
HOSTNAME=ubuntu
USER=user
...

对于单独一个进程而言,其运行使用的环境变量可以按照如下命令查看($PID设置为对应进程的ID即可):

user@ubuntu:~$ cat /proc/$PID/environ

上述命令返回的是一个包含环境变量及其值的列表,以name=value的形式描述,彼此之间以null字符(\0)分割。
比较重要的环境变量
- HOME:用户家目录,“cd ~”命令返回的目录
- SHELL:目前环境中使用的shell程序是,一般都是/bin/bash
- HISTSIZE:历史命令记录的个数
- MAIL:使用mail命令在收信时系统读取的邮件箱
- PATH:所有可执行文件的搜寻路径,目录与目录之间用冒号分割,可执行文件的搜寻顺序也是按照目录顺序依次进行的

2.set

set命令将bash内的环境变量和自定义变量都显示出来。

3.export

环境变量是可以给子程序使用的变量,自定义变量是不会被子程序继续使用的。如果需要将特殊的有意义的自定义变量给后续的子程序使用,那么就是使用export命令来实现。

user@ubuntu:~$ export varible

添加一条新路径到PATH变量:

user@ubuntu:~$ export PATH="$PATH:/home/user/bin"

或者

user@ubuntu:~$ PATH="$PATH:/home/user/bin"
user@ubuntu:~$ export PATH

3.特性实例说明

1.变量读取read

read直接后接变量名,就会出现等待输入的界面,输入值赋给变量。-t参数可以指定等待的秒数,-p可以借提示字符给用户。-d可以指定输入的定界符结束行,-s用于不回显方式读取密码。

user@ubuntu:~$ read -t 10 -p "please input a number:" var
please input a number:123
user@ubuntu:~$ echo $var
123

如果用户在10秒内没有输入,直接结束等待返回。

2.declare

user@ubuntu:~$ declare [-aixr] var

-a: 将后面的var变量定义为数组类型
-i:将var定义为整数类型
-x:与export一样,将var定义为环境变量
+x:将var从环境变量撤销为自定义变量
-r:将var设置为readonly,var只能读取,不能修改,也不能unset

user@ubuntu:~$ declare -x PATH
user@ubuntu:~$ declare -a arr;arr[1]=12345
user@ubuntu:~$ echo ${arr[1]}
12345

变量的默认类型都是“字符串”,如果不指定类型,则1+2是字符串而不是相加:

user@ubuntu:~$ sum=1+2;echo $sum
1+2
user@ubuntu:~$ declare -i sum=1+2; echo $sum
3

如果将变量声明为readonly,那么需要注销后再登录才能恢复该变量的类型。

3.变量删除

从前面删除变量内容

  • #:符合删除文字的最短的那个
  • ##:符合删除问题的最长的那个
user@ubuntu:~$ path=$PATH;echo $path
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
user@ubuntu:~$ echo ${path#/*lightdm:}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
user@ubuntu:~$ echo ${path##/*:}
/usr/local/games

从后面删除变量内容

  • %:符合删除文字的最短的那个
  • %%:符合删除问题的最长的那个
user@ubuntu:~$ echo ${path%/lightdm*}
/usr/lib/lightdm/
user@ubuntu:~$ echo ${path%%/lightdm*}
/usr/lib/

内容替换

user@ubuntu:~$ echo ${path/sbin/SBIN}
/usr/lib/lightdm/lightdm:/usr/local/SBIN:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
user@ubuntu:~$ echo ${path//sbin/SBIN}
/usr/lib/lightdm/lightdm:/usr/local/SBIN:/usr/local/bin:/usr/SBIN:/usr/bin:/SBIN:/bin:/usr/games:/usr/local/games

这里写图片描述

4.变量测试与替换

首先判断某个变量是否存在,如果存在则使用现有的设定,若变量不存在,则使用一个给定的设定。
这里写图片描述
上述都是根据str是否有来设定var变量的值,”str:” 代表str没定义或者为空,“str”代表没有定义。

5.变量的长度

user@ubuntu:~$ echo ${#var}

6.特殊变量

常用特殊变量如下:
- $0:获取当前的shell名
- $UID:检测当前脚本是否是超级用户,如果是则$UID为0
- $$:当前shell的进程号
- $?:上一条指令执行后返回的值
- PS1:bash环境的命令提示字符,默认的提示字符是~/.bashrc中的一行指令指定的
- $IFS:内部字段分割符,用来分割字段的分隔符的环境变量。默认为空白字符(空格,tab,换行符)

user@ubuntu:~$ echo $$
2052
user@ubuntu:~$ echo $?
0
user@ubuntu:~$ echo $0
bash
user@ubuntu:~$ echo $UID
1000
user@ubuntu:~$ PS1='\w>'
~>
user@ubuntu:~$ ifs=$IFS;IFS=':'
user@ubuntu:~$ lines=1:2:3:4; for l in $lines; do echo $l;done;
1
2
3
4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值