1. Shell 脚本规范

一个规范的 Shell 脚本在第一行会指出由哪个程序(解释器)来执行脚本中的内容,这一行内容在 Linux bash 的编程一般为:

#! /bin/bash
# 或者, 不过注意,要在255个字符以内!
#! /bin/sh

在执行bash脚本的时候,内核会根据“#!”后的解释器来确定该用哪个程序解释这个脚本中的内容,不过注意。这一行必须位于每个脚本顶端的第一行,如果不是第一行则为脚本的注释行。

类似这种的有很多,例如:

  1. #! /bin/sh
  2. #! /bin/bash
  3. #! /usr/bin/awk
  4. #! /bin/sed
  5. #! /usr/bin/tcl
  6. #! /usr/bin/expect
  7. #! /usr/bin/perl
  8. #! /usr/bin/env python

如果在脚本开头的第一行不指定解释器,那么就要用对应的解释器来执行脚本,这样才能确保脚本正确执行,例如:

如果是 Shell 脚本,就用bash test.sh 执行

如果是Python 脚本,就用 python test.py 执行

如果是expect 脚本,就用 expect test.py 执行


2. Shell 脚本执行

当 Shell 脚本运行时,它会先查找系统环境变量 ENV,该变量指定了环境文件(加载顺序通常是 /etc/profile~/.bash_profile~/.bashrc/etc/bashrc等),在加载了上述环境变量文件后,Shell 就开始执行 Shell 脚本中的内容。

Shell 脚本是从上到下,从左至右依次执行每一行的命令及语句的,既执行完了一个命令后在执行下一个,如果在 Shell 脚本中遇到子脚本(即脚本嵌套)时,就会先执行子脚本的内容,完成后再返回父脚本继续执行父脚本内后续的命令及语句,

通常情况下,在执行 Shell 脚本时,会向系统内核请求启动一个新的进程,以便在该进程中执行脚本的命令及子Shell脚本,基本流程如下图所示。

设置 Linux 的 crond 任务时,最好能在定时任务脚本中重新定义系统环境变量,否则,一些系统环境变量将不会被加载,这个问题需要注意!


3. Shell 脚本变量

存放一个值的空间即为变量,

默认情况下,在 bash shell 中是不会区分变量类型的,例如:常见的变量类型为数字、字符串、小数等,这和其他强类型语言(例如:Java/C语言)是有区别的,当然,如果需要指定Shell变量的类型,也可以使用 declare 显示定义变量的类型,但在一般情况下没有这个需求,Shell 开发者在开发脚本时需要自行注意 Shell 脚本中变量的类型。

变量可分为两类:环境变量(全局变量)和普通变量(局部变量)

环境变量也可称为全局变量,可以在创建它们的Shell 及其派生出来的任意子进程 Shell 中使用,环境变量又可分为自定义环境变量和 bash 内置的环境变量。

普通变量也可称为局部变量,只能在创建它们的Shell函数或Shell脚本中使用,普通变量一般由开发者在开发脚本程序时创建。


3.1 环境变量

环境变量一般是指用 expirt 内置命令导出的变量,用于定义 Shell 的运行环境,保证 Shell 命令的正确执行,Shell 通过环境变量来确定登录用户名命令路径终端类型登录目录等,所有的环境变量都是系统全局变量,可用于所有子进程中,这包括编辑器、Shell 脚本和各类应用。

环境变量可以在命令行中设置和创建,但用户退出命令时这些变量值就会丢失,因此,如果希望永久保存环境变量,可在用户家目录下的.bash_profile.bashrc(非用户登录模式特有,例如远程 SSH)文件中,或者全局配置/etc/bashrc(非用户登录模式特有,例如远程 SSH)或 /etc/profile 文件中定义,在将环境变量放入上述的文件中后,每次用户登录时这些变量都将被初始化。

按照系统规范,所有环境变量的名字均采用大写形式,在将环境变量应用于用户进程程序之前,都应该用 expirt 命令导出定义,例如:正确的环境变量定义方法为 exprot OLDGIRL=1

有一些环境变量,比如 HOME、PATH、SHELL、UID、USER 等,在用户登录之前就已经被 /bin/login 程序设置好了,通常环境变量被定义保存在用户家目录下的.bash_profile 文件或全局的配置文件/etc/profile中。

在查看设置的变量时,有3个命令可以显示变量的值:set、env 和 declare(替代早期 typeset)set 命令输出所有的变量,包括全局变量和局部变量,env 命令只显示全局变量,declare 命令输出所有的变量、函数、整数和已经导出的变量,set -o 命令显示 bash Shell 的所有参数配置信息

系统变量表见系统环境变量表


3.1.1 自定义环境变量

(1)设置环境变量

如果想要设置环境变量,就要在给变量赋值之后或在设置变量时使用 export 命令,另外,除了 export 命令。带 -x 选项的 declare 内置命令也可以完成同样的功能(注意:此处不要再前面加 $)

export 命令和 declare 命令的格式如下:

export 变量名=value
变量名=value ; export 变量名
declare -x 变量名=value

例如:

[root@www ~]$ export NAME=oldboy
[root@www ~]$ NAME=oldboy ; export NAME
[root@www ~]$ declare -x NAME=oldboy

(2)设置环境变量(永久生效)

用户的环境变量配置:

[root@www ~]$ ls /root/.bashrc			# 推荐再此文件中优先设置
/root/.bashrc
[root@www ~]$ ls /root/.bash_profile
/root/.bash_profile

全局的环境变量配置

[root@www ~]$ /etc/profile
[root@www ~]$ /etc/bashrc
[root@www ~]$ /etc/profile.d/

若要在登陆后初始化或显示加载内容,则把脚本文件放在 /etc/profile.d/ 下即可(无需加载执行权限)

(3)设置登录提示的两种方式

第一种是在/etc/motd里增加提示的字符串,如下:

[root@www ~]$ cat /etc/motd
welcome to Linux.

第二种是在/etc/profile.d/下面增加如下脚本:

[root@www ~]$ cat /etc/profile.d/login_info.sh
echo "welcome to Linux."

以下是在生产场景下(在Java环境中),自定义环境变量的示例。

export JAVA_HOME=/application/jdk
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
export RESIN=/applaction/resin

提示

上述的环境变量设置通常放在/etc/profile全局环境变量里,

如果是写Java的脚本,那么最好是把上述 Java 环境配置放入脚本内重新定义,特别是作为定时任务执行的脚本。


3.1.2 显示与取消环境变量

(1)通过 echo 或 printf 打印环境变量

[root@www ~]$ echo $HOME
/root
[root@www ~]$ echo $UID
0
[root@www ~]$ echo $PWD
/root
[root@www ~]$ echo $SHELL
/bin/bash
[root@www ~]$ echo $USER
root
[root@www ~]$ printf "$HOME\n"
/root

提示

在写Shell 脚本时可以直接使用系统默认的环境变量,一般情况下是不需要重新定义的,在使用定时任务等执行 Shell 脚本时建议在脚本中重新定义。

(2)用 env 或 set 显示默认的环境变量

[root@www ~]$ env
XDG_SESSION_ID=17
HOSTNAME=www.oliven.com
TERM=xterm
...
[root@www ~]$ set
BASH=/bin/bash
...
[root@www ~]$ declare | head
BASH=/bin/bash
...

(3)用 unset 消除本地变量和环境变量

[root@www ~]$ echo $USER
root
[root@www ~]$ unset USER
[root@www ~]$ echo $USER [root@www ~]$

3.1.3 环境变量初始化与对应文件的生效顺序

在登录Linux系统并启动一个 bash shell 时,默认情况下 bash 会在若干个文件中查找环境变量的设置,这些文件可统称为系统环境文件,bash 检查的环境变量文件的情况取决于系统运行 Shell 的方式,系统运行 Shell 的方式有 3 种。

(1)通过系统用户登录后默认运行的 Shell

(2)非登录交互式运行 Shell

(3)执行脚本运行非交互是 Shell

当用户登录 Linux 系统时,Shell 会作为登录 Shell 启动,此时的登录 Shell 加载环境变量的顺序如上图。

用户登录系统后首先会加载 /etc/profile 全局环境变量文件,这是 Linux 系统上默认的 Shell 主环境变量文件,系统上每个用户登录都会加载这个文件。

当加载完 /etc/profile 文件后,才会执行 /etc/profile.d/目录下的脚本文件,这个目录下的脚本文件由很多,例如:系统的字符集设置(/etc/sysconfig/i18n)等,以便用户登录后即可运行脚本

之后开始运行 $HOME/.bash_profile(用户环境变量文件),在这个文件中,又会去找 $HOME/.bashrc(用户环境变量文件),如果有,则执行,如果没有,则不执行,在$HOME/.bashrc文件中又会去找/etc/bashrc(全局环境变量文件),如果有,则执行,如果没有,则不执行。

如果用户的Shell 不是登录时启动的(比如手动敲下 bash 时启动或者其他不需要输入密码的登录及远程 SSH 连接情况)那么这种非登录 Shell 只会加载 $HOME/.bashrc(用户环境变量文件),并会去找 /etc/bashrc(全局环境变量文件),因此如果希望在非登录 Shell 下也可读到设置的环境变量等内容,就需要将变量设定写入 $HOME/.bashrc 或者 /etc/bashrc,而不是 $HOME/.bash_profile/etc/profile


3.2 普通变量

3.2.1 定义本地变量

变量的赋值,一般有五种写法:

name=value
name1='value'
name_2="value"
_name_3=`cmd`
_na_me_4=$(cmd)

变量名一般是由字母、数字、下划线组成的,可以以字母或下划线开头,

符号 作用
无引号,
' 单引号,输出时,将单引号内的所有内容都原样输出,这称为强引用
" 双引号,输出双引号内的所有内容,如果内容中有变量,特殊转义符等,会先把变量,转移符等解析出结果,然后再输出最终内容,这成为强引用
` 反引号,一般用于引用命令,执行的时候命令会被执行,与$()作用相同,
$() 与`作用相同

3.2.2 shell 调用变量

要想调用变量,方法是:

[root@www ~]$ echo $name
[root@www ~]$ printf $name

3.2.3 grep 调用变量

[root@www ~]$ cat grep.log
oliven
china
[root@www ~]$ echo $name
oliven [root@www ~]$ grep $name grep.log
oliven
[root@www ~]$ grep '$name' grep.log
[root@www ~]$ grep "$name" grep.log
oliven

由此得出:

符号 意义
grep 无引号 调用的变量(不推荐)
grep 单引号 使用的是自身,'$name',是使用的是$name这个5字符串进行匹配而不是,变量
grep 双引号 调用的变量(推荐使用)

3.2.4 awk 调用变量

[root@www ~]$ x=some
[root@www ~]$ awk 'BEGIN {print $x}' [root@www ~]$ awk 'BEGIN {print '$x'}' [root@www ~]$ awk 'BEGIN {print "$x"}'
$x
[root@www ~]$ awk 'BEGIN {print "'$x'"}'
some
awk x=some x='some' x="some" x=`cmd`
awk 加双引号 本身 本身 本身 本身
awk 不加引号
awk 加单引号 正确输出 报语法错
awk 加单引号后在同时加双引号 正确输出 正确输出 正确输出 正确输出

3.3 特殊变量

在 Shell 中存在一些特殊且重要的变量,例如:$0、$1、$#,我们称之为特殊位置参数变量。要从命令行、函数或脚本执行等处传递参数时,就需要在 Shell 脚本中使用位置参数变量。下表为常用特殊位置参数变量的说明。

位置变量 作用说明
$0 获取当前执行的 Shell 脚本的文件名,如果包含路径,那么就包括路径
$n 获取当前执行的 Shell 脚本的第 n 个参数值,如果 n 大于9,则用大括号括起来,例如${10},与空格分隔
$# 获取当前执行的 Shell 脚本后面接的参数的总个数
$* 获取当前 Shell 脚本所传参的参数,不加引号和 $@ 相同,如果加上双引号,例如:"$*",则表示将所有的参数视为单个字符串,相当于"$1 $2 $3"
$@ 获取当前 Shell 脚本所有传参的参数,不加引号和 $* 相同,如果加上双引号,例如:"$@",则表示将所有的参数视为不同的独立字符串,相当于"$1" "$2" "$3" "...",这是将多参数传递给其他程序的最佳方式,因为他会保留所有的内嵌在每个参数里的任何空白,当"$@"和"$*"都加上 双引号时,两者时有区别的,都不加双引号时,两者无区别
$? 获取执行上一个指令的执行状态返回值(0未成功,非零为失败),这个
$$ 获取当前执行的 Shell 脚本的进程号(PID),这个变量不常用,了解即可
$! 获取上一个在后台工作的进程的进程号(PID),这个变量不常用,了解即可
$_ 获取再次之前执行的命令或脚本的最后一个参数,这个变量不常用,了解即可

3.4 变量子串

Shell 变量子串的常用操作见下表,也可以在执行 man bash 命令之后,搜索Parameter Expansion 找到相应的帮助。

ID 表达式 说明
1 ${parameter} 返回变量parameter的内容
2 ${#parameter} 返回变量parameter内容的长度
3 ${parameter:offset} 在变量parameter中,从offset之后开始提取子串到结尾
4 ${parameter:offset:length} 在变量parameter中,从位置offset 之后开始提取长度为length的子串
5 ${parameter#word} 从变量parameter开头开始删除最短匹配的 word 子串
6 ${parameter##word} 从变量parameter开头开始删除最长匹配的 word 子串
7 ${parameter%word} 从变量parameter结尾开始删除最短匹配的 word 子串
8 ${parameter%%word} 从变量parameter结尾开始删除最长匹配的 word 子串
9 ${parameter/pattern/string} 使用 string 代替第一个匹配的 pattern
10 ${parameter//pattern/string} 使用 string 替换所有匹配的 pattern
11 ${parameter:-word} 如果 parameter 的变量值为空或未赋值,则会返回 word 字符串并替代变量的值,用途:如果变量未定义,则返回备用的值,防止变量为空值或因未定义而导致异常
12 ${parameter:=word} 如果 parameter 的变量值为空或未赋值,则设置这个变量值为 word,并返回其值,位置变量和特殊变量不适用
13 ${parameter:?word} 如果 parameter 变量值为空或未赋值,那么 word 字符串将被作为标准错误输出,否则输出变量的值
14 ${parameter:+word} 如果 paraneter 变量值为空或未赋值,则什么都不做,否则 word 字符串将替代变量的值

4. Shell 运算符

如果要执行算术运算,就会离不开各种运算符号,和其他编程语言类似,Shell 也有很多算术运算符,如下表所示:

算术运算符 意义
+、- 加发、减法
*、/、% 乘法、除法、取余
** 幂运算
++、-- 增加、减少
!、&&、|| 逻辑非、逻辑与、逻辑或
<、<=、>、>= 小于、小于大雨、大于、大于等于
==、!=、= 相等、不相等、对于字符串"="也可以表示相当于
<<、>> 向左移位、向右移位
~、|、&、^ 按位取反、按位异或、按位与、按位或
=、+=、-=、*=、/=、%= 赋值运算符例如,a+=1相当于a=a+1,
a-=1 相当于a=a-1*
运算命令 意义
(()) 用于整数运算的常用运算符,效率很高
let 用于整数运算,类似于(())
expr 可用于整数运算,但还有很多其他的额外功能
bc Linux 下的一个计算器程序(适合整数及小数运算)
$[] 用于整数运算
awk awk 既可用于整数运算,也可以用于小数运算
declare 定义变量值和属性,-i 参数可以用于定义整形变量,做运算
() 括号中的命令将会新开一个子shell顺序执行,所以括号内的变量不能被余下的部分使用,多个命令由分号;分隔
$() 执行该命令,与`相同,
((n#y)) 进制转换,例如$((2#10100101))、$((16#5f))
((a++)) 整数重新赋值并自动增长,((a++))同等于let a++
{} 不创建子shell执行命令,例如{ echo "Hello Linux."; }
测试表达式符号 [] test [[]] (())
便捷是否需要空格 需要 需要 需要 需要
逻辑操作符 !、-a、-o !、-a、-o !、&&、|| !、&&、||
整数比较操作符 -eq、-gt、-lt、-ge、-le -eq、-gt、-lt、-ge、-le -eq、-gt、-lt、-ge、-le 或者 =、>、<、>=、<= =、>、<、>=、<=
字符串比较操作符 =、==、!= =、==、!= =、==、!= =、==、!=
是否支持通配符匹配 不支持 不支持 支持 不支持

x.-系统变量列表

CDPATH			# 冒号分割的目录列表,最为cd命令的搜索路径
HOME # 当前用户的主目录
IFS # shell用来将文本字符串分割成字段的一系列字符
MAIL # 当前用户手机哪像的文件名(bash shell会检查这个文件,看看有没有新邮件)
MAILPATH # 冒号分割的当前用户收件箱的文件名列表(bash shell会检查这个文件,看有没有新邮件)
OPTARG # getopts命令处理的最后一个选项参数值
OPTIND # getopts命令处理的最后一个选项参数的索引号
PATH # shell查找命令的目录列表,由冒号分隔
PS1 # shell命令行界面的主提示符
PS2 # shell命令行界面的次提示符
BASH # 当前shell实例的全路径名
BASH_ALIASES # 含有当前已设置别名的关联数组
BASH_ARGC # 含有传入子函数或shell脚本的参数总数的数组变量
BASH_ARCV # 含有传入子函数或shell脚本的参数的数组变量
BASH_CMDS # 关联数组,包含shell执行过的命令的所在位置
BASH_COMMAND # shell正在执行的命令或马上就执行的命令
BASH_ENV # 设置了的话,没个bash脚本会在运行前先尝试运行该变量定义的启动文件
BASH_EXECUTION_STRING # 使用bash -c选项传递过来的命令
BASH_LINENO # 含有当前执行的shell函数的源代码行号的数组变量
BASH_REMATCH # 只读数组,在使用正则表达式的比较运算符=~进行肯定匹配(positive match)时,包 含了匹配到的模式和子模式
BASH_SOURCE # 含有当前正在执行的shell函数所在源文件名的数组变量
BASH_SUBSHELL # 当前子shell环境的嵌套级别(初始值是0)
BASH_VERSINFO # 含有当前运行的bash shell的主版本号和次版本号的数组变量
BASH_VERSION # 当前运行的bash shell的版本号
BASH_XTRACEFD # 若设置成了有效的文件描述符(0,1,2),则'set -x'调试选项生成的跟踪输出可被重定向。通常用来跟踪输出到一个文件中
BASHOPTS # 当前启用的bash shell选项的列表
BASHPID # 当前bash进程的PID
COLUMNS # 当前bash shell实例所用终端的宽度
COMP_LINE # 当前命令行
COMP_POINT # 当前光标位置相对于当前命令起始的索引
COMP_KEY # 用来调试shell函数不全功能的最后一个键
COMP_TYPE # 一个整数值,表示所尝试的不全类型,用以完成shell函数补全
COMP_WORDBREAKS # Readline库中用于单词补全的词分隔字符
COMP_WORDS # 含有当前命令行所有单词的数组变量
COMPREPLY # 含有由shell函数生成的可能填充代码的数组变量
COPROC # 占用未命名的协进程的I/O文件描述符的数组变量
DIRSTACK # 含有目录栈当前内容的数组变量
EMACS # 设置为't'时,表明emasc shell缓冲区正在工作,而编辑功能被禁止
ENV # 如果设置了该环境变量,在bash shell脚本运行之前会先执行已定义的启动文件(仅用于当bash shell以POSIX模式被调用时)
EUID # 当前用户的有效用户ID(数字形式)
FCEDIT # 供fc命令使用的默认编辑器
FIGNORE # 在进行文件名不全时可以忽略后缀名列表,由冒号分分隔
FUNCNAME # 当执行的shell函数的名称
FUNCNEST # 当设置成非零值时,表示所允许的最大函数嵌套及数(一旦超出,当前命令即被终止)
GLOBIGNORE # 冒号分隔的模式列表, 定义了在进行文件名扩展时可以忽略一组文件名。
GROUPS # 含有当前用户属组列表的数组变量
histchars # 控制历史记录扩展,最多可有3个字符
HISTCMD # 当前命令在历史记录中的编号
HISTCONFTROL # 控制哪些命令留在历史记录列表中
HISTFILE # 保存shell历史记录列表的文件名(默认是 .bash_history)
HISTFILESIZE # 最多在历史文件中存多少行
HISTTIMEFORMAT # 如果设置了且非空,就用作格式化字符串,以显示bash历史中每条命令的时间戳
HISTIGNORE # 由冒号分隔的模式列表,用来决定历史文件中哪些命令会被忽略
HISTSIZE # 最多在历史文件中存多少条命令
HOSTFILE # shell在补全主机名时读取的文件名称
HOSTNAME # 当前主机的名称
HOSTTYPE # 当前运行bash shell的机器
IGNOREEOF # shell在退出前必须受到连续的EOF字符的数量(如果这个值不存在,默认是1)
INPUTRC # Readline初始化文件名(默认是.inputrc)
LANG # shell的语言环境类别
LC_ALL # 定义了一个语言环境类别,能够覆盖LANG变量
LC_CTYPE # 决定如何解释出现在文件名扩展和模式匹配中的字符
LC_COLLATE # 设置字字符串时用的排序规则
LC_MESSAGES # 在解释前面带有$的双引号字符时,该环境变量决定了所采用的语言环境设置
LC_NUMERIC # 决定着格式化数字时采用的语言环境设置
LINENO # 当前执行的脚本的行号
LINES # 定义了终端上可见的行数
MACHTYPE # 用'CPU-公司-系统'(CPU-company-system)格式定义的系统类型
MAPFILE # 一个数组变量,当mapfile命令未指定数组变量作为参数时,它存储了mapfile所读入的文本
MAILCHECK # shell查看新邮件的频率(以秒为单位,默认值是60)
OLDPWD # shell之前的工作目录
OPTERR # 当设置为1时,bash shell会显示getopts命令产生的错误
OSTYPE # 定义了shell 所在的操作系统
PIPESTATUS # 含有前台进程的退出状态列表的数组变量
POSIXLY_CORRECT # 设置了的话,bash会以POSIX模式启动
PPID # bash shell父进程的PID
PROMPT_COMMAND # 设置了的话,在命令行主提示符显示之前会执行这条命令
PROMPT_DIRTRIM # 用来定义当启用\w或\w提示符字符串转移时显示的尾部目录名的数量,被删除的目录名会用一组英文据点替换。
PS3 # select 命令的提示符
PS4 # 如果使用了bash的-x选项,在命令行之前显示的提示信息
PWD # 当前工作目录
RANDOM # 返回一个0 ~ 32767的随机数(对其的赋值可作为随机数生成器的种子)
READLINE_LINE # 当使用bind -x命令时,存储Readline缓冲区的内容
READLINE_POINT # 当使用bind -x命令时,表示Readline缓冲区内容插入点的当前位置
REPLY # read命令的默认变量
SECONDS # 自从shell启动到现在的秒数(对其赋值将会重置计数器)
SHELL # bash shell 的全路径名
SHELLOPTS # 已启用bash shell 选项列表,列表项之间以冒号分割
SHLVL # shell的层级,每次启动一个新bash shell,该值增加1
TIMEFORMAT # 指定了shell的时间显示格式
TMOUT # select和read命令在没输入的情况下等待多久(以秒为单位),默认值为0,表示无限长
TMPDIR # 目录名,保存bash shell创建的临时文件
UID # 当前用户的真实用户ID(数字形式)

Linux 变量的使用的更多相关文章

  1. linux变量心得

    前一段时间学习了一下linux的变量,现在总结有3点需要特别注意: linux变量和C/C++变量的区别 linux变量的引用 linux变量特有的命令替换 先说第一点,linux变量更像是宏定义,只 ...

  2. linux --> Linux变量之$#, $*, $@含义

    Linux变量之$#, $*, $@含义 一.介绍 $# //是传给脚本的参数个数 $ //是脚本本身的名字 $1 //是传递给该shell脚本的第一个参数 $ //是传递给该shell脚本的第二个参 ...

  3. Linux变量及运算

    变量赋值:var=var_value 变量引用:$var 算术运算:var=`expr $var1 + $var2` 字符串连接:var=str$var1 数值比较:-eq/-ne/-gt/-lt/- ...

  4. 菜鸟学Linux - 变量基本规则

    变量是一个很重要的概念,无论是bash脚本还是其他语言,都是如此.在bash中,创建变量很简单,给变量一个名称即可.默认情况下,变量的值为空.我们可以通过等号为变量赋值.需要注意的是,变量和变量的值不 ...

  5. Linux 变量 $$ $! $? $- $# $* $@ $0 $n

    [参考文章]:linux中shell变量$#,$@,$0,$1,$2的含义解释 1. 变量说明 1.1 $$ Shell本身的PID(ProcessID) 1.2 $! Shell最后运行的后台Pro ...

  6. Linux - 变量

    printenv - print all or part of environment 显示所有变量:print 显示某个变量:print <variable name> 或者 echo ...

  7. Linux变量

    变量:(大的分为环境变量与本的变量) 本地变量: 本地变量在用户现在的shell生命期的脚本中使用.例如,本地变量file-name="loop.doc",这个值只在用户当前she ...

  8. Linux变量内容的删除、取代与替换

    变量内容的删除与取代 范例一:先让小写的 path 自定义变量配置的与 PATH 内容相同 [root@www ~]# path=${PATH} [root@www ~]# echo $path /u ...

  9. Linux变量键盘读取、数组与声明: read, array, declare

    [root@www ~]# read [-pt] variable 选项与参数: -p :后面可以接提示字符! -t :后面可以接等待的『秒数!』这个比较有趣-不会一直等待使用者啦! 范例一:让用户由 ...

随机推荐

  1. Redis基于eval的多字段原子增量计算

    目录 目录 1 1. 前言 1 2. 优点 1 3. 方法一:使用struct 2 3.1. 设置初始值(覆盖原有的,如果存在) 2 3.2. 查询k1的值 2 3.3. 设置初始值(覆盖原有的,如果 ...

  2. BAT的真的适合创业团队吗?

    平时在公司扮演一个逗比得角色和亲爱的们友好相处的我根本不愿意去思考这么深入的课题.本来在上一家公司就涉及的太深,心爱的一条小产品线被咔掉后心疼不已.只想深入研究技术不问世事了.怎奈何突然有一天说要招一 ...

  3. _编程语言_C++_Lambda函数与表达式

    C++11提供了对匿名函数的支持,称为Lambda表达式函数 Lambda 表达式把函数看作对象.Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值 ...

  4. 学习protobuf 感想

    前俩篇博文是从大牛的博客抄过来的, 写的都很好. 这里还写简单写下自己的感想: 1. 和json比, protobuff编码后的体积小很多, 这是肯定的. 都源自于protobuff内部的一系列特殊的 ...

  5. springMVC:HandlerInterceptor拦截器的使用

    1.使用背景 Web项目中需要判断http接口用户Post上来的数据是否合法,如果不合法要另做处理,用户Post上来的数据是Json形式的,我们用了@RequestBody标记自动将json形式的提交 ...

  6. poj 2352 stars 【树状数组】

    题目 题意:按y递增的顺序给出n颗星星的坐标(y相等则x递增),每个星星的等级等于在它左边且在它下边(包括水平和垂直方向)的星星的数量,求出等级为0到n-1的星星分别有多少个. 因为y递增的顺序给出, ...

  7. 用命令行上传本地代码到GitHub

    有两种方式上传,ssh和https,ssh老是报错=.=我用的是https 先下载git   https://git-scm.com/downloads 在代码的文件夹的同级目录中邮件打开git ba ...

  8. 数字签名、数字证书的原理以及证书的获得java版

    数字签名原理简介(附数字证书) 首先要了解什么叫对称加密和非对称加密,消息摘要这些知识. 1. 非对称加密 在通信双方,如果使用非对称加密,一般遵从这样的原则:公钥加密,私钥解密.同时,一般一个密钥加 ...

  9. Python自动化开发 - 进程、线程(一)

    本节内容 1.操作系统发展史 2.进程和线程 3.Python threading 模块 一.操系统发展史 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统 ...

  10. 语音识别功能_微信小程序代办清单任务

    最近想给自己的代办清单任务微信小程序想加个语音识别识别功能,废话不多说,直接说重点,语音识别使用的是百度语音识别api,因为微信小程序的录音输入文件目前只能是mp3或aac 但是百度语音识别不支持这两 ...