文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>shell 语法

shell 语法

时间:2006-06-26  来源:huanghaojie

1.shell执行选项
-n 测试shell script语法结构,只读取shell script但不执行 
-n string is not "null". -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输入行

2.传递一个间接引用给函数
message=Hello
Hello=Goodbye

echo_var "$message" # Hello
echo_var "${!message}" # Goodbye

3.exec 用法 
#exec ls -l  执行ls -l命令后退出当前shell

4.控制字符
修改终端或文本显示的行为.控制字符以CONTROL + key 组合.
控制字符在脚本中不能正常使用.
Ctl-B 光标后退,这应该依赖于bash 输入的风格,默认是emacs 风格的.
Ctl-C Break,终止前台工作.
Ctl-D 从当前shell 登出(和exit 很像)
"EOF"(文件结束符).这也能从stdin 中终止输入.
在console 或者在xterm window 中输入的时候,Ctl-D 将删除光标下字符.
当没有字符时,Ctrl-D 将退出当前会话.在xterm window 也有关闭窗口
的效果.
Ctl-G beep.在一些老的终端,将响铃.
Ctl-H backspace,删除光标前边的字符.如:
1 #!/bin/bash
2 # 在一个变量中插入Ctl-H
3
4 a="^H^H" # 两个 Ctl-H (backspaces).
5 echo "abcdef" # abcdef
6 echo -n "abcdef$a " # abcd f
7 # 注意结尾的空格 ^ ^ 两个 twice.
8 echo -n "abcdef$a" # abcdef
9 # 结尾没有空格 没有 backspace 的效果了(why?).
10 # 结果并不像期望的那样
11 echo; echo
Ctl-I 就是tab 键.
Ctl-J 新行.
Ctl-K 垂直tab.(垂直tab?新颖,没听过)
作用就是删除光标到行尾的字符.
Ctl-L clear,清屏.
Ctl-M 回车

5.重定向
stdin, stdout, 和stderr 的文件描述符分别
是0, 1, 和 2. 对于正在打开的额外文件, 保留了描述符3 到9.
1): > filename
# > 会把文件"filename"截断为0 长度.
# 如果文件不存在, 那么就创建一个0 长度的文件(与'touch'的效果相同).
# : 是一个占位符, 不产生任何输出.
2) 1>filename
 # 重定向stdout 到文件"filename".
 1>>filename
 # 重定向并追加stdout 到文件"filename".
3) 2>filename
 # 重定向stderr 到文件"filename".
 2>>filename
 # 重定向并追加stderr 到文件"filename".
4) &>filename
 # 将stdout 和stderr 都重定向到文件"filename".
5)2>&1
 # 重定向stderr 到stdout.
 i>&j
 # 重定向文件描述符i 到 j.
 # 指向i 文件的所有输出都发送到j 中去
 >&j
 # 默认的, 重定向文件描述符1(stdout)到 j.
 # 所有传递到stdout 的输出都送到j 中去.
[j]<>filename
 # 为了读写"filename", 把文件"filename"打开, 并且分配文件描述符"j"给它.
 # 如果文件"filename"不存在, 那么就创建它.
 # 如果文件描述符"j"没指定, 那默认是fd 0, stdin.
 #
 # 这种应用通常是为了写到一个文件中指定的地方.
 echo 1234567890 > File # 写字符串到"File".
 exec 3<> File # 打开"File"并且给它分配fd 3.
 read -n 4 <&3 # 只读4 个字符.
 echo -n . >&3 # 写一个小数点.
 exec 3>&- # 关闭fd 3.
 cat File # ==> 1234.67890
6)删除一个文件的内容, 但是保留文件本身, 和所有的文件权限:
1 cat /dev/null > /var/log/messages
2 # : > /var/log/messages 有同样的效果, 但不会产生新的进程.(因为:是内建的)

6.#echo $$ >tmp$$   $$ 表示当然终端的PID

7.函数调用和return 运用
更进一步的问题是如何给函数传递参数和获得返回值。BASH 中函数参数的定义并不需要在函数 定义处就制定,而只需要在函数被调用时用 BASH 的保留变量 $1 $2 ... 来引用就可以了;BASH 的返回值可以用 return 语句来 指定返回一个特定的整数,如果没有 return 语句显式的返回一个返回值,则返回值就是该函数最后一条语句执行的结果(一般为 0,如果执行失败返回 错误码)。函数的返回值在调用该函数的程序体中通过 $? 保留字来获得。下面我们就来看一个用函数来计算整数平方的例子:

#!/bin/bash

square() {
 let "res = $1 * $1"
 return $res           #记住res值,然后通过$?来调用。
}

square $1
result=$?
echo $result

exit 0

8.Shell常用的系统变量并不多,但却十分有用,特别是在做一些参数检测的时候。下面是Shell常用的系统变量
表示方法 描述
$n $1 表示第一个参数,$2 表示第二个参数 ...
$# 命令行参数的个数
$0 当前程序的名称
$? 前一个命令或函数的返回码
$* 以"参数1 参数2 ... " 形式保存所有参数
$@ 以"参数1" "参数2" ... 形式保存所有参数
$$ 本程序的(进程ID号)PID
$! 上一个命令的PID
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载