“Unix shell,一种壳层与命令行界面,是UNIX操作系统下传统的用户和计算机的交互界面。第一个用户直接输入命令来执行各种各样的任务。普通意义上的shell就是可以接受用户输入命令的程序。它之所以被称作shell是因为它隐藏了操作系统低层的细节。
Bourne shell
、C shell
、Korn shell
等。Bourne shell
:史蒂夫·伯恩在贝尔实验室时编写,1978年随Version7Unix首次发布。C shell
:C shell(csh)比尔·乔伊在加州大学伯克利分校时编写,1979年随BSD首次发布。Korn shell
:是一款由大卫·科恩(David Korn)于二十世纪八十年代早期在贝尔实验室开发的Unix shell,并在1983年7月14日的USENIX年度技术会议(英语:USENIX Annual Technical Conference)上发布shell变量是shell设置的特殊变量,也是shell正确运行所必须的。分为局部变量和环境变量。
MYVAR="hello"
# 访问变量
echo $MYVAR
#清除变量
unset MYVAR
终端下查看所有变量:set
说明一个变量为只读:readonly
(无法用unset清除)
export设置的全局变量只是临时的,重启后失效。
HOME
保存用户目录PATH
保存用冒号分割的目录路径名TERM
终端类型(xterm图形终端 linux文本终端)UID
当前用户的标识符 取值是由数字构成的字符串PWD
当前工作目录的绝对路径名PS1
主提示符 # $PS2
辅助提示符 在输入行末尾 \ 输出该提示符IFS
shell指定的缺省域分割符LOGNAME
保存登录名SHELL
保存缺省shellRANDOM
产生随机数# 数组变量
ARRAY=(1 2 3)
# 显示第一个数组元素
echo ${ARRAY[0]}
# 显示数组长度
echo ${#ARRAY[*]}
echo ${#ARRAY[@]}
# 显示所有元素
echo ${ARRAY[@]}
echo ${ARRAY[*]}
变量=${var:-word} var为空或未设置,用word代替var进行替换,var值不变
变量=${var:=word} var为空或未设置,用word代替var进行替换,var值为word
变量=${var:=word} var不为空,变量值为var值,var值不变
变量=${var:?message} var为空或未设置,message作为标准错误打印出来
变量=${var:?message} var不为空,用message进行替换变量值,var值不变
变量=${var:+word} var设置,用word代替var进行替换,var值不变
变量=${var:+word} var未设置,变量值为空,var值不变仍为空
${var} 或 $var: 变量值。
${var:-value}: 如果$var不为空(test -n $var),使用$var;否则使用value
${var:=value}: 如果$var不为空,使用$var;否则将value赋给$var,并使用value
${var:?value}: 如果$var不为空,使用$var的值。否则,打印value并退出(exit)。类似断言$var不为空
${var:+value}: 如果$var不为空,则使用value,否则使用空
${#var}: 返回变量$var的长度。
${var#pattern} 将 $var 的值从左侧删除与模式 pattern 匹配的最短字符串并返回
${var##pattern} 将 $var 的值从左侧删除与模式 pattern 匹配的最长字符串并返回
${var%pattern} 将 $var 的值从右侧删除与模式 pattern 匹配的最短字符串并返回
${var%%pattern} 将 $var 的值从右侧删除与模式 pattern 匹配的最长字符串并返回
其中:#表示左侧 %表示右侧。一个#或%表示最短;两个#或%表示最长。
${var/pattern/replace} 将$var的值中第一个与模式pattern匹配的串替换为 replace 并返回。
${var/pattern} 将$var的值中第一个与模式pattern匹配的串删除并返回。
${var//pattern/replace} 将$var的值中所有与模式pattern匹配的串替换为replace*并返回。
${var/#pattern/replace} 将$var的值开头与模式pattern匹配的串替换为replace并返回。
${var/%pattern/replace} 将$var的值结尾与模式pattern匹配的串替换为replace并返回。
${var^pattern} 将$var值开头与模式pattern匹配的串转换为大写。如果模式pattern省略,则将首字母转换为大写。
${var^^pattern} 将$var值中所有与模式pattern匹配的串转换为大写。如果模式pattern省略,则将整个$var转换为大写。
${var,pattern} 将$var值开头与模式pattern匹配的串转换为小写。如果模式pattern省略,则将首字母转换为小写。
${var,,pattern} 将$var值中所有与模式pattern匹配的串转换为小写。如果模式pattern省略,则将整个$var转换为小写。
${var:pos} 返回 $var 值从 pos 开始(到结尾)的子字符串。
${var:pos:len} 返回 $var 值从 pos 开始长度为 len 的子字符串。
# 使用算数运算的结果替换算数表达式所在位置的内容$((1+1))
var=`expr 4 \ * 9`
let var=2**3 (mi yun suan)
myvar=`date`
echo $myvar
“
,`,",\
if
then
elif
then
else
fi
if test $[num1] -eq $[num2]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
“-e 文件存在则为真 -r 文件存在且可读为真 -w 文件存在且可写为真 -x 文件存在且可执行为真 -s 文件存在且非空为真 -d 文件存在且为目录为真 -f 文件存在且为普通文件为真 -c 文件存在且为字符型特殊文件 -b 文件存在且为块特殊文件
“= 等于则为真 != 不相等则为真 -z 字符串为空串为真 -n 字符串为非空串为真
“-eq 等于 -ne 非等于 -lt 小于 -gt 大于 -le 小于等于 -ge 大于等于
“-a 逻辑与 操作两边均为真 -o 逻辑或 操作两边一边为真则为真 ! 逻辑非 条件为假则为真 优先级: ! -a -o if [ -x file1 -a -x fiel2 ] fiel1 file2 都存在且可执行则为真 混合条件: && ||
case $变量名 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认执行的命令序列
;;
esac
for i in 1 2 3 4
do
echo $i
done
x=0
while [ $x -lt 10]
do
echo $x
x=$(($x+1))
done
select c in c1 c2 all none
do
case $ in
)
;;
)
;;
*)
;;
esac
done
用户只能根据shell的定义来使用这些变量,而不能重定义
$# 位置参数的数量
$* 所后位置参数的内容
$? 命令执行后返回的状态 获取函数的返回值
$$ 当前进程的进程号
$! 后台运行的最后一个进程号
. 执行文件
: 空操作
& 后台工作
$() 命令替换 a=$(date) echo $a
(()) 算数表达式计算 同let
$(()) 算数扩展(不用于被括起来的值中包含=的情形)
[] 同 test
[[]] 同上
“启动调试 bash -选择项 shell程序文件名