bsh简要介绍

   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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值