bsh 是sco open server中的用户缺省shell,也是许多其它OS中支持的shell。另外,由于ksh是bsh的扩展,几乎所有的bsh脚本都可在ksh中运行。所以有必要对bsh有所了解。
在sco open server中bsh命令位于/bin/sh,在某些系统中可能叫做/bin/bsh。
shell的启动和环境
1. shell启动时的选项
-a 将所有变量输出
-c "string" 从string中读取命令
-e 使用非交互模式
-f 禁止shell文件名产生
-h 定义
-i 交互式模式
-k 为命令的执行设置选项
-n 读取命令但不执行
-r 受限模式
-s 命令从标准输入读取
-t 执行一条命令,然后退出shell
-u 在替换时使用未设置的变量将会出错
-v 显示shell的输入行
-x 跟踪模式,显示执行的命令
以上不冲突的选项可以组合使用。
2. 执行sh -r 或者/bin/rsh可以进入受限模式。在受限模式下,
用户不能改变自己的目录,不能修改PATH变量,不能使用绝对路径名
执行命令,也不能重定向输出。
3. 使用set改变shell选项。
set -x 是加上该选项
set +x 是去掉该选项
4. 用户shell启动文件为.profile,你可以在该文件中添加环境变量和脚本。
5. shell环境变量
CDPATH cd命令使用的搜索路径
IFS 内部的域分隔符,一般为空格符、制表符或换行符
PS1 主命令提示符,默认$
PS2 从命令提示符 默认>
特殊字符及其含义
1. shell变量名使用的特殊字符
$# 传给命令shell的参数个数
$- 在shell启动或者使用set命令时提供选项
$? 上一条命令执行后返回的值
$$ 当前shell的进程号
$! 上一个子进程的进程号
$@ 所有的参数,每个都用双括号括起。
$* 所有参数,用双括号括起。
$n 位置参数值,n表示位置。 $0是当前shell脚本名,$1是第一个参数,……
2. 通配符
ls [!m]* 寻找不以m开头的文件名
3. 数据或程序控制使用的特殊字符
` `命令替换,重定向一条命令的输出作为另一条命令的输入。(注意啦:是与单引号相反的那个符号`)
4. 使用双引号,始其中的变量形式可以引用值
使用/逃逸符,表示其后的字符不具有特殊含义或者不是shell的函数。
shell变量
9.2.1 用户定义变量
$count=1
$x=20 $y=aaaa
变量未赋值使用时,shell并不报告错误,而是给变量一个空值。
9.2.2 条件变量替换
${count:-2} 意义为:引用count变量,如果前面未设置该变量,则给其赋缺省值2
${count:?message} 意义为:引用count变量,如果前面未设置该变量,则显示message
9.2.3 readonly var 将var设置为只读变量
设置的变量都是在子shell中起作用,也就是说是局部变量。用export命令可以让变量被其他子shell识别。
运算及条件循环结构
9.3.6 对shell变量进行算术运算
expr integer operator integer
operator 有:+ - * / % 其中 * 要使用/*进行转义
没有括号进行优先运算,所以需要用``分层运算: expr `expr 5 + 7` / 3
9.3.8 条件判断:
if command_1
then
command_2
command_3
else
command_4
command_5
fi
if command
then
command
elif command
then
command
elif command
then
command
fi
test命令进行条件测试:
test condition
condition: 测试字符串: str1 = str2 有相同内容,相同长度时候为真
str1 != str2
-n str1 串长度>0时候为真
-z str1 串长度=0时候为真(空串)
str1 非空时候为真
测试两整数之间关系
int1 -eq int2 =
int1 -ne int2 !=
int1 -gt int2 >
int1 -ge int2 >=
int1 -lt int2 <
int1 -le int2 <=
测试文件
-r file 用户可读时候为真
-w file 用户可写
-x file 用户可执行
-f file 为正规文件时候
-d file 为目录文件时候
-c file 为字符特殊设备文件时候
-b file 为块特殊设备文件
-s file 不是0字节文件时候
-t file 当文件描述符制定的设备是终端时候
and or 组合多条条件
交互式读入数据
read var1 var2 var3
case 语句:pattern中可用 | 或者 or 联结不同模式
case "$var" in
pattern1)
command
command;;
pattern2)
command
command;;
*)
command
command;;
esac
空命令用
:
循环语句:
while condition
do
command
command
done
until condition
do
command
command
done
shift 命令可将参数变量往前移动
for var in arg1 arg2 arg3 ...
do
command1
command2
done
for循环中var依次取值arg1,arg2,arg3进行循环
break , continue可以用在循环中
trap
command1 && command2 意义为:只有command1成功执行,才会执行command2
command1 || comand2 意义为:只有command1 执行失败,才会执行command2
在sco open server中bsh命令位于/bin/sh,在某些系统中可能叫做/bin/bsh。
shell的启动和环境
1. shell启动时的选项
-a 将所有变量输出
-c "string" 从string中读取命令
-e 使用非交互模式
-f 禁止shell文件名产生
-h 定义
-i 交互式模式
-k 为命令的执行设置选项
-n 读取命令但不执行
-r 受限模式
-s 命令从标准输入读取
-t 执行一条命令,然后退出shell
-u 在替换时使用未设置的变量将会出错
-v 显示shell的输入行
-x 跟踪模式,显示执行的命令
以上不冲突的选项可以组合使用。
2. 执行sh -r 或者/bin/rsh可以进入受限模式。在受限模式下,
用户不能改变自己的目录,不能修改PATH变量,不能使用绝对路径名
执行命令,也不能重定向输出。
3. 使用set改变shell选项。
set -x 是加上该选项
set +x 是去掉该选项
4. 用户shell启动文件为.profile,你可以在该文件中添加环境变量和脚本。
5. shell环境变量
CDPATH cd命令使用的搜索路径
IFS 内部的域分隔符,一般为空格符、制表符或换行符
PS1 主命令提示符,默认$
PS2 从命令提示符 默认>
特殊字符及其含义
1. shell变量名使用的特殊字符
$# 传给命令shell的参数个数
$- 在shell启动或者使用set命令时提供选项
$? 上一条命令执行后返回的值
$$ 当前shell的进程号
$! 上一个子进程的进程号
$@ 所有的参数,每个都用双括号括起。
$* 所有参数,用双括号括起。
$n 位置参数值,n表示位置。 $0是当前shell脚本名,$1是第一个参数,……
2. 通配符
ls [!m]* 寻找不以m开头的文件名
3. 数据或程序控制使用的特殊字符
` `命令替换,重定向一条命令的输出作为另一条命令的输入。(注意啦:是与单引号相反的那个符号`)
4. 使用双引号,始其中的变量形式可以引用值
使用/逃逸符,表示其后的字符不具有特殊含义或者不是shell的函数。
shell变量
9.2.1 用户定义变量
$count=1
$x=20 $y=aaaa
变量未赋值使用时,shell并不报告错误,而是给变量一个空值。
9.2.2 条件变量替换
${count:-2} 意义为:引用count变量,如果前面未设置该变量,则给其赋缺省值2
${count:?message} 意义为:引用count变量,如果前面未设置该变量,则显示message
9.2.3 readonly var 将var设置为只读变量
设置的变量都是在子shell中起作用,也就是说是局部变量。用export命令可以让变量被其他子shell识别。
运算及条件循环结构
9.3.6 对shell变量进行算术运算
expr integer operator integer
operator 有:+ - * / % 其中 * 要使用/*进行转义
没有括号进行优先运算,所以需要用``分层运算: expr `expr 5 + 7` / 3
9.3.8 条件判断:
if command_1
then
command_2
command_3
else
command_4
command_5
fi
if command
then
command
elif command
then
command
elif command
then
command
fi
test命令进行条件测试:
test condition
condition: 测试字符串: str1 = str2 有相同内容,相同长度时候为真
str1 != str2
-n str1 串长度>0时候为真
-z str1 串长度=0时候为真(空串)
str1 非空时候为真
测试两整数之间关系
int1 -eq int2 =
int1 -ne int2 !=
int1 -gt int2 >
int1 -ge int2 >=
int1 -lt int2 <
int1 -le int2 <=
测试文件
-r file 用户可读时候为真
-w file 用户可写
-x file 用户可执行
-f file 为正规文件时候
-d file 为目录文件时候
-c file 为字符特殊设备文件时候
-b file 为块特殊设备文件
-s file 不是0字节文件时候
-t file 当文件描述符制定的设备是终端时候
and or 组合多条条件
交互式读入数据
read var1 var2 var3
case 语句:pattern中可用 | 或者 or 联结不同模式
case "$var" in
pattern1)
command
command;;
pattern2)
command
command;;
*)
command
command;;
esac
空命令用
:
循环语句:
while condition
do
command
command
done
until condition
do
command
command
done
shift 命令可将参数变量往前移动
for var in arg1 arg2 arg3 ...
do
command1
command2
done
for循环中var依次取值arg1,arg2,arg3进行循环
break , continue可以用在循环中
trap
command1 && command2 意义为:只有command1成功执行,才会执行command2
command1 || comand2 意义为:只有command1 执行失败,才会执行command2