bash 杂记


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:随机数

   
    


   
   
 

你可能感兴趣的:(shell,function,String,File,bash,Parameters)