科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件Bourne Shell之Shell基础知识

Bourne Shell之Shell基础知识

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Bourne Shell 基础及其他很多有用的特性,shell编程及组织。

作者:Stephen Bourne 来源:51CTO.com整理 2007年9月14日

关键字: Bourne Shell shell 基础知识

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共19页)

建议:man sh 查看相关UNIX上的改进或特性

(1)shell提示符及其环境

在passwd文件中可以看到每个用户登陆后使用的shell,下面两个文件也是这个意思。

/etc/passwd文件  

提示符:$

/etc/profile $HOME/.profile

(2)shell执行选项

在建立一个shell脚本后我们要用sh命令来运行和测试,下面是一些sh常用的参数

-n 测试shell script语法结构,只读取shell script但不执行

-x 进入跟踪方式,显示所执行的每一条命令,用于调度

-a Tag all variables for export

-c "string" 从strings中读取命令

-e 非交互方式

-f 关闭shell文件名产生功能

-h locate and remember functions as defind

-i 交互方式

-k 从环境变量中读取命令的参数

-r 限制方式

-s 从标准输入读取命令

-t 执行命令后退出(shell exits)

-u 在替换中如使用未定义变量为错误

-v verbose,显示shell输入行

这些选项可以联合使用,但有些显然相互冲突,如-e和-i.

(3)受限制shell(Restircted Shell)

说了半天好象这个东西没什么用,那就不管了。

sh -r 或 /bin/rsh

不能执行如下操作:cd, 更改PATH,指定全路径名,输出重定向,因此可以提供一个较

好的控制和安全机制。通常rsh用于应用型用户及拨号用户,这些用户通常是看不到提

示符的。通常受限制用户的主目录是不可写的。

不足:如果用户可以调用sh,则rsh的限制将不在起作用,事实上如果用户在vi及more

程序中调用shell,而这时rsh的限制将不再起作用。

(4)用set改变 shell选项

实际上就是设置sh的默认参数,我们在运行shell脚本时,并不总是使用sh scriptsfile,而是用./scriptsfile来运行,这个时候就使用sh的默认参数。

用户可以在$提示符下用set命令来设置或取消shell的选项。使用-设置选项,+取消相应

选项,大多数UNIX系统允许a,e,f,h,k,n,u,v和x的开关设置/取消。

set -xv

启动跟踪方式;显示所有的命令及替换,同样显示输入。

set -tu

关闭在替换时对未定义变量的检查。

使用echo $-显示所有已设置的shell选项。

(5)用户启动文件 .profile

PATH=$PATH:/usr/loacl/bin; export PATH

(6)shell环境变量

这里是举例说明什么是环境变量,但还是没说什么是环境变量,按我的理解,环境变量类似于宏定义,或者说环境变量是一个作用于系统的全局变量或局部变量。

CDPATH 用于cd命令的查找路径

HOME /etc/passwd文件中列出的用户主目录

IFS Internal Field Separator,默认为空格,tab及换行符

MAIL /var/mail/$USERNAME mail等程序使用

PATH

PS1,PS2 默认提示符($)及换行提示符(>)

TERM 终端类型,常用的有vt100,ansi,vt200,xterm等

示例:$PS1="test:";export PS1

test: PS1="$";export PS1

$echo $MAIL

/var/mail/username

(7)保留字符及其含义

$ shell变量名的开始,如$var

| 管道,将标准输出转到下一个命令的标准输入

# 注释开始

& 在后台执行一个进程

? 匹配一个字符

* 匹配0到多个字符(与DOS不同,可在文件名中间使用,并且含.)

$- 使用set及执行时传递给shell的标志位

$! 最后一个子进程的进程号

$# 传递给shell script的参数个数

$* 传递给shell script的参数

$@ 所有参数,个别的用双引号括起来

$? 上一个命令的返回代码

当前shell的名字

$n (n:1-) 位置参数

$$ 进程标识号(Process Identifier Number, PID)

覆盖现有文件的数据

>file 输出重定向

这个没看明白

`command` 命令替换,如 filename=`basename /usr/local/bin/tcsh`

会在现有文件末尾追加数据

>>fiile 输出重定向,append

转义符及单引号:

注意单引号,双引号,没引号的异同。

$echo "$HOME $PATH"

/home/hbwork /opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:

$echo '$HOME $PATH'

$HOME $PATH

$echo $HOME $PATH

$HOME /opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/hbwork/bin

其他:

$dir=ls

$$dir

$alias dir ls

$dir

将ls结果输出到文件filelist

ls > filelist

将ls结果追加到文件filelist最后

ls >> filelist

统计文件filelist内容的行数

wc -l < filelist

统计字符串filelist的总行数

wc -l filelist

等待5秒钟,显示5 seconds reaches,执行ls -l命令

sleep 5; echo 5 seconds reaches; ls -l

[在当前进程中找出所有的inetd进程]

ps ax |grep inetd

这个没看明白,find不会用,呵呵

find / -name core -exec rm { } ; &

设置filename为日期+年月日.log

filename=`date "+%Y%m%d"`.log

作者:Stephen Bourne 在Bell实验室开发

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章