Linux
的
SHELL
学习指南
Linux
的
SHELL
学习指南
.
.............................................................................................................
1
变量
...........................................................................................................................................
2
Test
命令,用于条件判断
.......................................................................................................
3
控制流结构
.
..............................................................................................................................
4
变量
变量设置值的模式:
Variable-name=value
设置实际值到
Variable-name
Variable-name+value
如果设置了
Variable-name
,则重设其值
Variable-name:?value
如果未设置
Variable-name
,显示未定义用户错误信息
Variable-name?value
如果未设置
Variable-name
,显示系统错误信息
Variable-name:=value
如果未设置
Variable-name
,设置其值
Variable-name:-value
同上,但是取值并不设置到
Variable-name
,可以被替换
例子:
# colour=blue
# echo
“
The sky is
${colour:-grey}
tody
”
# The sky is blue tody
变量的显示:
${values}
# gero=
”
dir hard
“
# echo ${gero}
# dir hard
显示本地
shell
变量:
set
# set
清除变量的值:
unset
# pc=enterprise
# echo ${pc}
# unset pc
# echo ${pc}
设置只读的变量:
readonly
# tape_dev=
”
/dev/rmt/on
”
# readonly tape_dev
环境变量:
# CONSOLE=tty1
# export CONSOLE
//CONSOLE
为环境变量
查看环境变量:
env
清除环境变量:
unset CONSOLE
位置参数:
$0,$1,$2
…
..$9
调用
shell
时,可以在后面加的参数,在
shell
里面可以根据位置得到输入的值。
特殊的变量参数:
$#
传递到脚本的参数个数
$*
以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此参数可以超过
9
个
$$
脚本运行的当前进程
ID
号
$!
后台运行的最后一个进程的进程
ID
号
$@
与
$#
相同,但使用时加引号,并在引号中返回每个参数
$-
显示
shell
使用的当前选项,与
set
命令功能相同。
$?
显示最后命令的退出状态。
0
:没有错误,其他值表示有错误。
Test
命令,用于条件判断
格式:
test condition
或者
[ condition ]
0
标示成功,其他的标示失败。
文件状态的测试:
-d
:目录
-s
:文件长度大于
0
,非空
-f
:文件
-w
:可写
-l
:符号连接
-u
:文件有
suid
位置
-r
:可读
-x
:可执行
例子:
# [ -w scores.txt ]
# echo $?
# 0
//
成功
# test
–
w scores.txt
# echo $?
# 0
逻辑判断:
-a
:逻辑与,操作符两边均为真,结果为真,否正为假
-o
:逻辑或,操作符两边一变为真,结果为真。否则为假
!
:逻辑否。
例子:
# [ -w results.txt
–
a
–
w scores.txt ]
# echo $?
# 0
字符串测试:
=
:两个字符串相等
!=
:两个字符串不等
-Z
:空字符串
-n
:非空字符串
例子:
# [ -z $editor ]
# echo $?
# TAPE=
”
/dev/rmt0
”
# TYPE2=
”
/dev/rmt1
”
# [
“
$TAPE
”
=
“
$TAPE2
”
]
# echo $?
# 1
数字测试:
-eq
:数值相等“
=
”
-ne
:数值不相等“!
=
”
-gt
:第一个数大于第二个数“
>
”
-lt
:第一个数小于第二个数“
<
”
-le
:第一个数小于等于第二个数“
<=
”
-ge
:第一个数大于等于第二个数“
>=
”
例子:
# number=130
# [
“
$number
”
–
eq
“
130
”
]
# echo $?
# 0
#[
“
990
”
–
le
“
995
”
]
–
a [
“
123
”
–
gt
“
33
”
]
Sh
:
[
:
too many arguments
# [
“
990
”
–
le
“
995
”
-a
“
123
”
–
gt
“
33
”
]
# echo $?
# 0
Expr
:命令行计算器
# expr 30/3/2
# 5
# expr 10+10
# 20
Expr
的其他用法还很模糊,要细看
控制流结构
If then else
语句:
if [ test ]
then echo
“
”
elif [ test ]
then echo
“
”
else echo
“
“
fi
case
语句:
Case $V
AR in
1)
echo
“
1
”
;;
2|3|4)
//
或关系
echo
“
2|3|4
”
;;
*)
echo
“
*
”
esac
*
:任意字符
?:任意单个字符
[
…
]
:类或范围中的任意字符
For
循环:
for var in 1 2 3 4 5
do
echo
“
$var
”
done
Until
循环:
until [ test ]
//
直到为
true
echo
“”
done
While
循环:
While [ test ]
//
当判断条件为
true
时执行
do
do
echo
“”
done
Break
和
continue
控制循环:
Break
:跳出循环
Continue
:下一个循环
SHELL
函数
function hello(){
echo
“
hello `date`
”
}
调用时直接使用函数名称就可。