shell与shellscript

shell使用注意事项

shell与shellscript

shell变量的设置规则

  1. 变量与变量内容通过一个等号”=”连接,注意等号两边不能直接 接空格符
  2. 变量只包括英文与数字, 且开头字符不能是数字
  3. 变量内容右空格符可使用双引号或单引号将变量内容结合起来,也就是说单引号或者双引号包含的内容为一个整体,但是值得注意的是

    • 双引号中的特殊字符将会被翻译成原文,例如 var = “lang is $LANG”,则此时$ LANG将被翻译成lans is en_US;
    • 而单引号的特殊符号则将被保持为原样。
  4. 转移字符”\”将特殊符号转为一般字符

  5. 在一串命令中,还需要通过其他的命令提供的信息,可以使用反单引号(注意不是单引号)“`命令`”)或” $(命令)”

    1
    version= $(uname -r)
  1. 若该变量为了增加变量内容时,则可用”$变量名称”或${变量}累加内容

    1
    PATH="$PATH":/home/bin
  2. 若该变变量需要在其他子进程中执行,则需要以export来使变量变成环境变量
    export PATH

  3. 取消变量的方法为使用”unset变量名称”

    常见例子

    1
    2
    3
    4
    5
    6
    7
    #在PATH环境变量中累加
    PATH=$PATH:/home/louis/bin
    PATH="$PATH":/home/louis/bin
    PATH=${PATH}:/home/louis/bin
    #将name变量的内容多输出yes
    name="$name"yes
    name=${name}yes

反单引号`的使用例子(在一串命令中,在`之内的命令将会被先执行,其执行的结果将会作为外部的输出信息)

1
ls -l `loacet crontab`

变量内容的删除、替代与替换


































变量设置方式 说明
\${变量#关键字} 若变量内容从头开始的数据符合”关键字”,则将符合的最短数据 删除
\${变量##关键字} 若变量内容从头开始的数据符合”关键字”,则将符合的最长数据删除
\${变量%关键字} 若变量内容从尾开始的数据符合”关键字”,则将符合的最短数据删除
\${变量%%关键字} 若变量内容从尾开始的数据符合”关键字”,则将符合的最长数据删除
\${变量/旧字符串/新字符串} 若变量内容符合”旧字符串”,则第一个旧字符串会被新字符串替换
${变量//旧字符串/新字符串} 若变量内容符合”旧字符串”,则全部的旧字符串会被新字符串替换

通配符与特殊符号


























符号 意义
* 代表0到无穷多个任意字符
? 代表一定有一个任意字符
[] 同样代表一定有一个在中括号内的字符(非任意字符)。例如[abcd]代表一定有一个字符,可能是a,b,c,d这四个任何一个
[-] 若有减号在中括号时,代表在编码顺序内的所有字符。例如[0-9]代表0到9之间的所有数字,因为数字的语系编码是连续的
[^] 若中括号内的第一个字符为指数符号^,例如[^abd]代表一定有一个字符,只要是非a,b,c的其他字符就接受的意思

特殊字符
# 批注符号,注释
\ 转义符号
; 连续命令的分隔符
| 管道
`` ``中间的命令可以先执行


数据流重定向

  1. 标准输入(stdin):文件描述符为0,使用<或<<;
  2. 标准输出(stdout): 文件描述码为1, 使用>或>>;
  3. 标准错误输出(stderr): 文件描述码为2, 使用2>或者2>>.

标准输出和标准错误

  • 1>: 以覆盖的方法将正确的数据输出到指定的文件或设备上
  • 1>>: 以追加的方法将正确的数据输出到指定的文件或设备上
  • 2>: 以覆盖的方法将错误的数据输出到指定的文件或设备上
  • 2>>: 以追加的方法将错误的数据输出到指定的文件或设备上
1
find /home -name anyname > list_right 2>list_err

/dev/null 垃圾黑洞

1
2
3
4
#将全部数据均写到一个文件中去
find /home -name anyname > list 2> list 错误
find /hoem -name anyname > list 2>&1
find /home -name anyname &> list

标准输入

将原本需要键盘输入的数据右文件内容代替

1
2
3
4
5
6
7
8
#创建catfile,从标准输入读取内容到catfile中,文件以[ctrl]+d结束
cat > catfile

#从.bashrc中读取内容
cat > catfile < ~/.bashrc

#从标准输入读取内容,输入关键字eof结束
cat > catfile <<"eof"