bash 杂记
来源:互联网 发布:windows无法连接到网络 编辑:程序博客网 时间:2024/05/16 19:25
I/O 重定向:
“>”和“>>"的区别在于前者导致overwrite,而后者则导致append。
一个命令的标准输出和标准输入都可以被重定向,而且顺序并不产生影响。
bg(shell内置命令)——可将进程设为后台进程
echo $PATH ——显示环境变量中的路径
export PATH=$PATH:directory——可用于添加shell的搜索路径
cd、pwd都属于shell的内置命令
可在shell中输入help来查看所有的shell内置命令
set命令可用来设置各种shell选项或者列出shell变量(包括环境变量)
type(shell 内置命令)可以判断某个命令的类型:alias ?二进制程序?shell builtin?
here script——I/O重定向的一种附加形式,形式为
command << token
content to be used as command's standard input
token
小技巧,在here scrpit中可将"<<"换成"<<-"的,这样shell会自动忽略输入中的起始空白,可以提高srcipt的可读性。
用命令的执行结果为变量赋值: Varible= $(Command)
习惯上常量名(包括环境变量)用大写,而变量名用小写
为变量赋值的时候,等号右边可以使用单引号或双引号,两者的区别在于使用双引号时其内部的变量仍会被shell执行替换,而使用单引号则无次特性。
双引号支持且内部的变量替换,但不支持其内部wildcard character的展开。
转义字符‘/'可以用来取消某些特性;它的作用是告诉shell:忽略下一个字符所表示的意义(但仍然会显示下一个字符)。
例如:“/$HOSTNAME”,则告诉shell不对变量HOSTNAME执行替换
又如:“/"$HOSTNAME/".",则告诉shell忽略下一个双引号,从而允许在文本中嵌入双引号。
此外,'/‘还可以用于取消newline的意义,从而以更好的可读行来书写带很长参数的命令,例如
ls -l /
--reverse /
--human-readable /
--full-time
shell function——可以被视为"script in scripts“,形式为
function foo_name
{
foo_body
}
shell function 本质上属于shell builtin
注意,shell function的定义必须在使用之前,而且函数体至少要包含一条合法命令。
调用shell function的方法:$(function_name)
流程控制
if 的三种形式:
if(condition;)——then——fi
if(condition;)——then——else——fi
if(condition;)——then——elif(condition)——fi
exit status &condition
规范编写的Unix程序会告知操作系统它的执行是成功还是失败,这通过exit status来实现。
exit status为0~255之间的整型数,0表示正常,其它所有值均表示失败。
exit status一方面可用于检测错误,另一方面可用于true/false测试。
test (shell 内置命令)
该命令最常和if一起使用,以进行true/false 测试
两种形式:
test [ expression ]
[ expression ] (注意,expresion和'['以及']'之间必须留出间隔)
test命令的逻辑很简单,如果expression为true,则test的exit status为0;否则,test的exit status为1
test内置了很多判断条件,例如
-d file 如果file是目录的话,返回true
-e file 如果file存在的话,返回true
-L file 如果file是符号链接的话,返回ture
file1 -nt file2 如果file1比file2的修改时间更近的话,返回true
-z string 若string为空的话,返回true
string1=string2 若string1和string2相等的话,返回true
shell script中';'充当命令分割符,可使得在一行中执行多个命令
exit (shell 内置命令)
命令用于立即终止执行,并设定exit status
id命令——用于获取当前用户的身份信息;id -u,则输出uid,root用户的uid为0。
“>$2”——将标准输出重定向至标准错误流
Debugging
注意,变量的定义可以为空,即"var="这样的语句是合法的。
在shell 脚本的地一行添加"-x",如"#!/bin/bash -x",可以使得bash在执行脚本时显示执行的每一行命令(已执行变量替换)。该调试技巧被称为tracing。或者也可以在脚本中调用"set -x"来开启tracing,调用"set +x"来关闭tracing。
键盘输入和算术运算
read (shell 内置命令)
read命令用于从键盘读取输入,并将其赋值给指定变量。
如果不为read命令指定变量,它会将读取的输入赋值给环境变量REPLY(注:无论如何,输入只会被赋值给二者之一)。
read命令也可带选项,-t指定最大等待时间;-s则则不回显用户输入,这对于要求输入密码的场合很适用。
integer arimetic
当算术表达式用括号包起来时,shell会对表达式进行求值运算。
在算术表达式中,对变量的引用不用使用$符号。
case(类似于C中的switch)
case word in
patterns ) statements ;;
esac
pattern "*"的作用类似C中的default
while
while condition do
commands
done
until
until condition do
commands
done
until与while的区别在于前者在condition为true时结束循环,而后者在condition为false时结束循环
命令行选项和参数
positional parameters: $0~$9,用于存储命令行参数的值,其中$0为脚本名;此外,$#表示除脚本名之外的参数个数。
shift是shell内置命令,用于操作positional parameters;每次调用shift时,将所有positional parameters向下移一位,即原来的$2变为$1,$3变为$2,$#也会随之减1;注意,$0不会因为执行shift而发生变化。
for
for variable in words; do
statements
done
for所执行的操作就是从words所代表的集合中取出一个word赋值给变量variable,然后执行下面的命令,并重复循环直至words变为空时为止。
for的一个很有用的特性就是它可以使用positional parameter来充当list of words
如,for i in $@
$@包含了所有命令行参数(不含脚本名称)
printf(shell内置命令)
检查exit status
$? 中包含着上一条执行的命令的exit status
true和false是shell的内置命令,它们除了将exit status设为0和1之外,不进行任何操作。
control operator &&和||
Signal
trap命令允许脚本在收到signal时执行对应的指令;其格式为: trap commands signals
注意,trap命令对于signal 9(SIGKILL)不起作用
$$:包含程序的pid
$RANDOM:随机数
- bash 杂记
- 杂记
- 杂记
- 杂记
- 杂记
- 杂记
- 杂记
- 杂记
- 杂记
- 杂记
- 杂记
- 杂记
- 杂记
- 杂记
- 杂记
- 杂记
- 杂记
- 杂记
- MFC教程(9)-- MFC的进程和线程(1)
- JavaScript中的高级特性及特别对象、属性和方法
- Oracle 10g 安装问题:Microsoft LoopBack Adapter 配置
- 开发保留标准浏览器功能的AJAX应用程序
- 一日一摸之第一日:工厂模式
- bash 杂记
- 利用ThreadLocal记录日志
- linux若干实用命令
- URLs,URIs,Proxies和Passwords 解析
- Unicode简介【转】
- 在AJAX开发中集成数据库技术
- Spring配置总结 (摘)
- Spring Aop Step-By-Step 学习笔记(上)
- ASP.Net2.0 分页显示简述(附源代码)