注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

liangxh2008的博客

 
 
 

日志

 
 

linux shell编程  

2010-05-11 17:55:00|  分类: shell |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一、 变量和运算符
1.set命令 可以查看和设置本地变量
2.readonly 查看本地只读变量
readonly variable-name 设置变量为只读变量
3.环境变量的设置在$HOME/.bash_profile (/etc/profile)中
4.export variable-name=val 设置变量为环境变量
5.env 查看所有环境变量
6.变量替换:
${var-name}显示实际值到var-name
${var-name:+val}如果设置了var-name,则显示其值为val,否则为空
${var-nmae:?val}如果未设置var-name,显示用户定义错误信息val
${var-name:-val}如果未设置var-name,显示其值为val
${var-nmae:=val}如果未设置var-name,设置其值,并显示
7.unset 取消变量
8.位置变量
$0        $1            $2            $3      $4   
脚本名    第一个参数 A    第二个参数 B    。。。。C    。。。。D     
注意:$10是表示第一个参数后面加上“0”,第10个参数可以通过shift命令得到
可用shift 或者shift[n]来表示左移参数的位置
shift与shift[1]相同,都是左移一个位置(从$1开始算,$0-脚本名是不会边的),如上图则$1的 值 为    B,$2的值为C......
$# 参数的个数($0不算在内)
$* 和 $@ 都是列出全部参数,下面举例说明它们的差异:
比如在命令行中输入 ./test.sh A "B C" D
则 $*和$@都为 A B C D
但是如果用了软引用之后:
"$@"可得到 "A" "BC" "D"三个字段
而"$*"则得到"A B C D"一个字段
9.标准变量(大部分都是环境变量):
EXINIT:保存使用vi初始化选项,如EXINIT='set nu tab=4';exprot EXINIT
IFS:域分隔符,默认是空格,可改边IFS=: 或 IFS=':'
HOME:主目录
LOGNAME:登录名
MAILCHECK:每隔多长时间检查是否有邮件
MAILPATH:用于多个邮箱时查看MAIL存储在哪几个文件中
TERM:终端类型
PATH:指定了当用户输入命令时linux搜索程序的目录由冒号:分隔,shell将按PATH中给出的顺序搜 索这些目录。找到的第一个与命令名称一致的可执行文件将被执行
TZ:时区
PS1:主提示符,其缺省值 '[\u@\h \w]\$ '
u:用户 h:主机名 w:当前的目录。最后的"$"是普通用户的提示符,特权用户是"#"
PS2:辅助提示符,一行中若需用多个命令时的提示符,缺省是">",如果用户在行末输入"\",然后 回车, 则会有改符号出现。
PWD:当前运行的进程号
$$:当前运行的进程号
$!后台运行的最后一个进程的ID
$- 显示shell使用的当前选项,与set相同
$? 显示最后命令的退出状态,0表示没有错误,其他表示错误。
10.影响变量的命令
(1)declare    设置或者显示变量
   -f      只显示函数名
   -r      创建只读变量
   -x      创建转出变量
   -i      创建整数变量
用+代替-可以颠倒选项的含义(r不能颠倒)
(2)export 创建传给子shell的变量(创建环境变量)
   --表明选项结束,所有的后续参数都是实参
   -f表明在“名-值”对中的名字是函数名
   -n把全局变量转换成局部变量,命令的变量不再传给子shell
   -p显示全局变量列表
(3)readonly 用于显示或者设置只读变量
   --表明选项结束
   -f创建只读变量
(4)typeset    用于显示或设置变量,是declare的同义词
(5)unset 取消变量的定义
--表明选项结束
-f删除只读变量(但不能取消从shell环境中删除指定的变量和函数,如PATH,PS1,PDID,EUID,PID,UID等)
11.双引号:
使用双引号可引用除字符$,`,\ 外的任意字符和字符串
12.单引号:
单引号与双引号不同的是shell会忽略任何引用值。换句话来说,如果屏蔽了其特殊含义,会将引号里所 有的字符,包括引号作为一个字符串
13.反引号:
设置系统命令的输出到变量。shell将反引号里的命令的内容作为一个系统命令并执行其内容
14.反斜杠:
   如果一个字符有特殊的意义,反斜杠可以屏蔽其含义,有特殊含义的字符有:& * + ^ $ ` " | ?
15.运算符:
按位运算符有:~ ,<<,>>,^>|,&
$[ ]表示对方括号中的表达式求值 $[ 2+8 ].(注意[]内左右都必须留空格)
$[ 2#111+1 ]=8 表示二进制的1111+1
运算符的优先级
以下级别高的优先级高
13级:+,- (正负)
12级:!,~ (逻辑非,按位取反)
11级:*,/,% (乘,除,取摸)
10级:+,- (加减)
9级:<<,>>按位左移动,右移
8级:<=,>=,<,> (小于等于,大于等于,小于,大于)
7级:==,!= (等于,不等于)
6级:& 按位与
5级:^ 按位异或
4级 | 按位或
3级&& 逻辑与
2级 || 逻辑或
1级=,+=,-=,*=,/=,%=,|=,<<=,>>=
          二、Shell输入与输出
1.echo 命令可以显示文本行或者变量,或者把字符串输入到文件
echo [option] string
-e 解析转义字符,
   转义符包括(
\c,回车不换行
\f,禁止
\t,跳格
\n)回车换行
-n 回车不换行,linux系统默认回车换行
2.read 从键盘或者文件的某一行文本中读如信息,并将其赋给一个变量
read varible1 varible2
如果只指定了一个变量,那么read将会把所有的输入赋给该变量,直到遇到第一个文件结束符或回车;如果给出了多个变量,它们按吮吸分别赋给不同的变量,。shell将用空格作为变量之间的分隔符
举例说明:在shell脚本中有read A B C命令行,而在提示的命令行中输入1 2 3,则A=1,B=2,C=3
3.cat 可以用来显示文件内容、创建文件,还可以用它来显示控制字符。
cat |options|filename1..filename2...
-v显示控制字符
使用cat命令时要注意,它不会在文件分页符处停下来,它会一下显示完整个文件。如果希望每次显示一页,可以使用more命令或者把cat命令的输出通过管道传递给另外一个具有分页功能的命令(如more,less)中。
cat命令举例:
cat myfile1 myfile2 myfile3>myfile123;
cat myfile123|more 分页显示
cat -v dos.txt 会出现“^M”等控制字符,这是在windows下的编辑器留下的
4.管道 可以通过管道把一个命令的输出作为另一个命令的输入
举例说明:df -k |awk '{print $1}'|grep -v "Filesystem"
df:显示所有文件系统对i节点和磁盘块的使用情况
awk:浏览和抽取信息
grep:文本过滤
显示所有文件系统对i接点和磁盘块的使用情况信息中的第一列并不含有"Filesystem"的信息

5.tee : 把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中
tee -a file 这个命令一般用于管道之后。
举例说明:
cat file|tee file.out 将file中的信息输出到屏幕并拷贝到file.out中
6.exec : exec命令可以用来代替当前shell;换句话说,并没有启动子shell,使用这一命令时任何现有环境都会    被清除,并重新启动一个shell
exec command其中的command通常是一个shell脚本
对文件描述符操作的时候(也只有在这时),它不会覆盖你当前的shell
举例说明:
exec **.sh 会重新登录并清除环境变量
7.标准输入、输出和错误
在shell中执行命令时,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名。
         文件          文件描述符   
输入文件----标准输入        0(缺省是键盘,也可以是文件或者其他命令的输出)   
输出文件---标准输出        1(缺省是屏幕,也可以是文件)   
错误输出文件--标准错误    2(缺省是屏幕,也可以是文件)   
系统中实际有12个文件描述符,可以任意使用文件描述符3-9
8.文件重定向 改变程序运行的输入来源或输出地点
   command > filename 把把标准输出重定向到一个新文件中
   command >> filename 把把标准输出重定向到一个文件中(追加)
   command 1 > fielname 把把标准输出重定向到一个文件中
   command > filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中
   command 2 > filename 把把标准错误重定向到一个文件中
   command 2 >> filename 把把标准输出重定向到一个文件中(追加)
   command >> filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中(追加)
   command < filename >filename2 把command命令以filename文件作为标准输入,以filename2文件作为标准输出
   command < filename 把command命令以filename文件作为标准输入
   command << delimiter 把从标准输入中读入,直至遇到delimiter分界符
   command <&m 把把文件描述符m作为标准输入
   command >&m 把把标准输出重定向到文件描述符m中
   command <&- 把关闭标准输入
   重定向的几个注意点:
   重定向中为保护原来的文件不被覆盖可以用 set -o noclobber 命令来限制
   用 set +o noclobber来取消限制,如果不取消的话也可以强制重定向
   command >| file
   cat <file>file 会清空file中的内容,因为shell会先清空stdout和stderr的管道。
     cat <file>>file会造成死循环,因为它是一行行读出来的,永远都没有结束符
9.合并标准输出和标准错误
   合并标准输出和标准错误的时候,切记shell是用左至右分析相应的命令
举例说明:
grep "hi" test.txt >test.out 2>&1 标准输出和错误输出都输入到标准输出中
10.使用文件描述符
   举例说明:
   exec 3<&0 0<name.txt    //设置3为标准输入 name.txt的内容输入到标准输入
   此时的exec不会清除环境变量,也不会重新登录,覆盖当前的sehll

          三、流控制结构
1.if then else 语句
if 条件1          #如果条件1为真
then            #那么
   command1        #执行命令1
elif 条件2        # 如果条件2为真
then            #那么
   command2        # 执行命令2
else            #如果条件1和条件2都不成立
   command3 执行命令3
fi            #完成(if 语句一定要以fi结束)
举例说明:
if [ "13" -lt "11"]    #如果13小于11
then          #那么
     echo "13<11"    #输出"13<11"
elif["13" -lt "12"]    #如果13小于12
then          # 那么
     echo "13<12"    #输出"13<12"
else          #否则
  评论这张
 
阅读(567)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017