shell及其他解释型语言的一般格式?
#!/bin/bash #shell脚本的首行格式 #!/usr/bin/python #python脚本的格式 #!/usr/bin/perl #perl脚本的格式 #Description: #"#"开头的单个井字号是注释符,其后内容不当做脚本程序执行 COMMAND #脚本的编程内容部分,命令的堆砌,单一命令的组合完成复杂任务
怎样使得定义的变量生效?
1.~]# . /etc/profile # 点后跟定义变量文件
2.~]# source /etc/profile #直接在当前shell生效
什么是位置变量?
用来描述参数位置的变量.
$0:代表脚本本身的名字
$1:脚本的第一个参数
$2:脚本的第二个参数
...
${10}:脚本的第10个参数 #注:从第十个开始以后要加大括号
$*:脚本所有参数,以一个整体字符串存储
$@:脚本所有参数,以单个参数作为一个整体存储
$#:脚本所有参数的总个数
如何定义一个变量?
1.declare -i #定义整型
-x #定义环境
-r #只读变量
2.export variable=expression #定义环境变量
变量如何引用?
1.$variable #$后跟变量名
2.${variable} #可加大括号
如何在脚本中调用命令的执行结果?
1.$(command) #命令的执行结果可赋值给变量
2.`command` #反引号同样是命令的执行结果
怎样得知系统定义了哪些变量?
1.set #查看系统定义的所有变量
2.env/printenv #查看定义的所有环境变量
该怎样取消一已定义好的变量?
1.unset variable#取消或者删除变量
注:variable= #变量赋值为空不等同于变量被取消
查看bashell的版本?
echo $BASH_VERSION
几个常见的环境变量:
MAIL:存储mail文件
MAILCHECK:隔多长时间巡检一次并发送mail
SHLVL:当前处于多少层shell
RANDOM:软件模拟实现随机数变量
1 Shell中的特殊符号
1.1 $ 美元符号。用来表示变量的值。如变量NAME的值为Mike,则使用$NAME就可以得到“Mike”这个值。
1.2 # 井号。除了做为超级用户的提示符之外,还可以在脚本中做为注释的开头字母,每一行语句中,从#号开始的部分就不执行了。
1.3 “” 双引号。shell不会将一对双引号之间的文本中的大多数特殊字符进行解释,如#不再是注释的开头,它只表示一个井号“#”。但$仍然保持特殊含义。(在双引号中的$加变量名,即:$PARAM_NAME,依然会转换成变量的值。)
1.3.1 双引号对于某些特殊符号是不起作用的, 例如:”,$,\,`(反引号)
1.3.2 双引号和单引号不能嵌套。即:echo ‘””’ 输出””, echo “’’” 输出’’
1.4 ‘’ 单引号。shell不会将一对单引号之间的任何字符做特殊解释。(在双引号中的$加变量名,即:$PARAM_NAME,不会转换成变量的值。)
1.4.1 echo “$HOME” (结果:/home/xiongguoan)
1.5 `` 倒引号。命令替换。在倒引号内部的shell命令首先被执行,其结果输出代替用倒引号括起来的文本,不过特殊字符会被shell解释。
1.5.1 echo ‘$HOME’ (结果:$HOME)
1.6 斜杠。用来去掉在shell解释中字符的特殊含义。在文本中,跟在后面的一个字符不会被shell特殊解释,但其余的不受影响。
1.7 []中括号, 主要是用来测试条件的,通常放在if语句的后面。 (不过还是不太明白),但是中括号本身不会在测试语句执行后消失。
1.7.1 echo [$HOME] (结果:出现错误)
1.7.2 echo [$HOME ] (结果:[/home/xiongguoan ]) (注意:HOME后面有空格哦。)
1.7.3 echo [$HOME –eq ‘/xiong’] (结果:[/home/xiongguoan –eq /xiong])
1.8 {}大括号,主要是和$符号配合,作为字符串连接来使用
1.8.1 echo ${HOME}ismydir (结果:/home/xiongguoanismydir)
2 预定义的变量
2.1 特殊变量
$ shell变量名的开始,如$var
| 管道,将标准输出转到下一个命令的标准输入
$# 记录传递给Shell的自变量个数
# 注释开始
& 在后台执行一个进程
? 匹配一个字符
* 匹配0到多个字符(与DOS不同,可在文件名中间使用,并且含.)
$- 使用set及执行时传递给shell的标志位
$! 最后一个子进程的进程号
$? 取最近一次命令执行后的退出状态(返回码)
$* 传递给shell script的参数
$@ 所有参数,个别的用双引号括起来
$0 当前shell的名字
$n (n:1-) 位置参数
$$ 进程标识号(Process Identifier Number, PID)
> 输出重定向
< 输入重定向
>> 输出重定向(追加方式)
[] 列出字符变化范围,如[a-z]
2.2 代值变量
* 任意字符串
? 一个任意字符
[abc] a, b, c三者中之一
[a-n] 从a到n的任一字符
2.3 特殊字符的表达
退回
c 打印一行时没有换行符 这个我们经常会用到
f 换页
回车
制表
v 垂直制表
\ 反斜线本身
2.4 其他字符
2.4.1 分号
; 表示一行结束
2.4.2 圆括号
() 表示在新的子shell中执行括号内的命令(这样可以不改变当前shell的状态。)
但是圆括号在单/双引号内失去作用,只作为普通字符。
2.4.3 花括号
2.4.3.1 分割命令的用法
与圆括号相似,但是:1. 花括号内的命令在当前shell中执行;2.花括号必须作为命令的第一个字符出现。
2.4.3.2 引用变量的用法
在$后面,表示变量名的开始和结束
2.4.4 方括号
相当与test命令,用来执行测试条件,通常用在需要判断条件的语句后面,例如:if,while等等。
3 设置变量
3.1 格式:VARNAME=value (i.e. PARAM=’hello’)
3.2 注意:
3.2.1 等号的前后不能有空格
3.2.2 如果变量的值是一个命令的执行结果,请加上反引号(`)。
4 引用变量
4.1 $VARNAME
4.1.1 e.i. echo $HOME (结果:/home/xiongguoan)
4.2 变量默认值
4.2.1 在引用一个变量的时候可以设定默认值。如果在此之前,该变量已经设定了值,则此默认值无效。如果此时变量没有被设定值,则使用此默认值(但是没有改变此变量的值)。
4.2.2 echo Hello ${UNAME:-there} #其中there是UNAME的默认值
4.2.3 其他关于默认值与判读变量的方法:
利用大括号表示变量替换
表示形式 |
说明 |
${VARIABLE} |
基本变量替换。大括号限定变量名的开始和结束 |
${VARIABLE:-DEFAULT} |
如果VARIABLE没有值,则这种表示形式返回DEFAULT的值 |
${VARIABLE:=DEFAULT} |
如果VARIABLE没有值,则这种表达形式返回DEFAULT的值。另外,如果VARIABLE没有设置,则把DEFAULT的值赋予它 |
${VARIABLE:+VALUE} |
如果VARIABLE被设置,则这种表示形式返回VALUE;否则,返回一个空串 |
${# VARIABLE} |
这种表示形式返回VARIABLE值的长度,除非VARIABLE是* 或者@在为*或者@的特殊情况下,则返回$@所表示的元素的个数。要记住,$ @保存传给该脚本的参数清单 |
${VARIABLE:?MESSAGE} |
如果VARIABLE没有值,则这种表示形式返回MESSAGE的值。Shell也显示出VARIABLE的名字,所以这种形式对捕获得错误很有用 |
4.2.4 注意:
4.2.4.1 使用${VALIABLE:?MESSAGE},如果发现此变量此时没有值,则脚本停止运行并显示行号和变量名称。 主要用于调试。
4.2.4.2
5 位置变量
5.1 使用$1,$2,$3…$9,${10},${11}…来代表输入的参数。其中$0代表被执行的命令或者脚本的名字。$1,$2…代表输入的第1,2…个参数
5.2 例子:
# cat count.sh#!/bin/sh
A=$1 # 将位置$1的数值读入,并赋给变量A
B=$2 # 将位置$2的数值读入,并赋给变量B
C=$[$A+$B] # 将变量A与B的值相加,将结果赋给C
echo $C # 显示C的数值
结果:
# ./count.sh 3 6
9
# ./count.sh 34 28
62
5.3 $@和$*代表参数的列表,$#代表参数的数量 (不知道$@和$*之间的差别)
6 运算符和优先级
Shell运算符和它们的优先级顺序
级别 |
运算符 |
说明 |
13 |
-, + |
单目负、单目正 |
12 |
!, ~ |
逻辑非、按位取反或补码 |
11 |
* , / , % |
乘、除、取模 |
10 |
+, - |
加、减 |
9 |
<< , >> |
按位左移、按位右移 |
8 |
< =, > =, < , > |
小于或等于、大于或等于、小于、大于 |
7 |
= = , ! = |
等于、不等于 |
6 |
& |
按位与 |
5 |
^ |
按位异或 |
4 |
| |
按位或 |
3 |
&& |
逻辑与 |
2 |
| | |
逻辑或 |
1 |
=, + =, - =, * =, /=, % =, & =, ^ =, | =, << =, >> = |
赋值、运算且赋值 |