加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

linux shell指令之二

(2010-09-30 00:30:32)
标签:

linux

指令

shell

bash

it

分类: ubuntu--时代要求开源
  • 自动补全。输入指令的前几个字符,连按两次Tab键,Bash会自动将名称补全。如果相应 命令唯一,只需按一下Tab即可。

  • 查看指令历史记录。history显示所有执行过的shell指令。!n执行指令历史中的第n条指令。!!执行最后一条指令,!ls执行最后一条以ls开头的指令。可通过环境变量HISTFILESIZE来指定历史记录的保存数目。

  • 指令别名。alias 别名=‘长指令’;unalias 别名 可取消别名。如果将别名定义在/etc/bashrc~/.bashrc这些初始化文件中,则每次登录就会自动定义这些指令别名。

  • 重定向。linux系统中有3个特殊的文件,stdin,stdout,stderr,文件号分别为0,1,2。重定向标准输入:tr “:” “|” <tmp.txt,打开tmp.txt作为输入,用“|”代替“:”,输出到屏幕,注意符号之间的空格,还有tmp.txt文件本身并不改变。重定向标准输出:cat >tmp.txt,重定向标准错误:2>tmp.txt。简而言之,”<”表示输入重定向,“>”表示输出重定向,”2>”表示输出错误重定向。输出重定向或错误重定向时,如果指定文件不存在,则建立新文件,如果存在,清空原来的文件。如果要保留原来内容,并将输出添加到文件的最后,用”<<”代替”<”。而<<END表示以字符串END为标准输入结束的标志。

  • 管道。用“|”将前一个指令的标准输出作为后一个指令的标准输入。

  • 环境变量。Linux启动时,会启动一个特殊的进程,名为init。由它为每个用户创建一个shell,从子进程退出到父进程用exit指令,创建子进程用指令bash(指在Linux通常默认的bash shell中)。所有进程都遵循的一组环境变量叫做标准环境变量,它们全部是大写字母构成。在变量名前加“$”获取环境变量的值。如echo $PWD显示当前工作目录。echo $$显示当前shell的进程号。而echo $?显示前一个指令的返回值(0表示顺利完成,否则表示某种错误)。可以用“=”为当前shell定义或改变环境变量(注意“=”两边不能有空格),删除用unset指令。用export可以把父进程的环境变量传递给子进程。环境变量名遵循C语言规定,且对特殊字符要用”\”转义。

  • 命令行的展开。首先展开的是花括号,如a{b,c}d展开为abd acd。但是如果花括号前有$,则把花括号内的当做变量名。如${PATH}表示变量PATH~展开为当前用户的家目录,即$HOME的值。$加变量名展开成这个变量的值,为避免混淆,可以用花括号将变量括起来。形如${!变量名},表示以变量名的值(仍为一个变量)为名称的变量的值。而形如${!字符串*}展开为所有以该字符串开头的变量名。此外还包括用###%%%等字符来进行匹配。指令替换的方式:$(指令)或者`指令`,这里是反向单引号。算术展开的形式为$((算术表达式))。参数分割的分割符采用环境变量IFS中列出的符号,默认为空格符、制表符和换行符。文件名展开时,斜杠/总是精确匹配,字符出现在文件名的开头或者是斜杠之前时必须精确匹配。精确匹配,就是*和?不能包含它们(”/”和部分”.”)。[范围]形式的匹配,如[acd;]表示和acd;相匹配。而[a-z0-9]匹配所有小写字母之一和数字(??)。

  • shell脚本。shell脚本分割符有| & ; ( ) < > Space Tab[time [-p]] [!] 指令1 [|指令2 ……],time显示指令执行时间,包括墙上时间(??)和CPU时间。-p指定显示格式为POSIX。组合指令有(指令序列)、{ 指令序列; }(注意花括号前后的空格)、((算术表达式))、[[逻辑表达式]]、(逻辑表达式)、!逻辑表达式、逻辑表达式1 && 逻辑表达式2、逻辑表达式1 || 逻辑表达式2。注意所有逻辑表达式为真时返回0(??)

    • shell结构语句。

      条件判断:

      if 指令序列; then

      指令序列;

      [ elif 指令序列; then

      指令序列;]

      ……

      [ else

      指令序列;]

      fi

    • 循环语句。

  1. for 变量名 [ in 可取值枚举 ]; do 指令序列;done

  2. for(( 表达式1; 表达式2; 表达式3 )); do 指令序列; done

  3. while 指令序列; do 指令序列; done

  4. until 指令序列; do 指令序列; done

  • 选择语句。

    case 变量 in

    模板1) 指令序列1;;

    模板2) 指令序列2;;

    ……

    esac

  • 测试语句用test,在脚本文件第一行加#/bin/sh#/bin/bash 来指定命令解释器。

    注:本文中(??)注明的,表示还有疑问,不能确定的内容。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有