通配符
  1. 没有 '.'
  2. [Aa] 表示 A 或者 a
  3. ? 表示任意字符
  4. * 表示任意字符串
IFS
  1. data='name, sex, rollno, location'
  2. oldIFS=$IFS
  3. IFS=', '
  4. for i in $data; do
  5. echo $i;
  6. done
变量
  1. $* 参数被作为一个单词 (这个变量很少被使用)
  2. $@ 参数按 IFS 分割
  3. $? 退出参数
  4. $$ 当前 shell 进程的 pid
  5. $! 后台运行的最后一个进程的 pid
长度
  1. var='xxxx'
  2. length=${#var}
  3. length=`echo -n $var | wc -m`
  4. word=`echo -n $var | wc -w`
拼接
  1. s1='abc'
  2. s2='def'
  3. s3=`printf "%s%s" $s1 $s2`
  4. echo $s3
变量默认值
  1. var=${var-'value'} # 如果 var 没被声明, 就用 value
子串
  1. a='abcd'
  2. echo ${a:0} # abcd
  3. echo ${a:1} # bcd
  4. echo ${a:1:2} # bc
子串表达式
  1. {$var#str} # 从开头删除 str
  2. {$var##str} # 从开头删除最长匹配的 str
  3. {$var%str} # 从结尾删除 str
  4. {$var%%str} # 从结尾删除最长匹配的 str
  5.  
  6. dir=/etc/httpd/httpd.conf
  7. echo ${dir#/*/} # httpd/httpd.conf
  8. echo ${dir##/*/} # httpd.conf
  9.  
  10. echo ${dir%/*/} # 没有删除任何
  11. echo ${dir%/*} # /etc/httpd
  12. echo ${dir%%/*} # 全部被删除 为空
字符串替换 (可以有正则表达式)
  1. str='abc 123 def abc'
  2. echo ${str/abc /def} # def123 def abc
  3. echo ${str//abc/def} # def 123 def def
  4. echo ${str//[0-9]/} # abc def abc
判断
字符串
  1. [ $var == "xxx" ]
  2. [ $var != "xxx" ]
  3. [ -n STRING ] # the length of STRING is nonzero
  4. [ -z STRING ] # the length of STRING is zero
数字
  1. [ $num -eq 10 ]
  2. [ $num -ne 10 ]
  3. [ $num -lt 10 ]
  4. [ $num -le 10 ]
  5. [ $num -gt 10 ]
  6. [ $num -ge 10 ]
文件
  1. [ -d $FILE_NAME ] # dir
  2. [ -e $FILE_NAME ] # exist
  3. [ -f $FILE_NAME ] # regular file
  4. [ -L $FILE_NAME ] # symbol link
  5. [ -r $FILE_NAME ]
  6. [ -w $FILE_NAME ]
  7. [ -x $FILE_NAME ]
  8. [ -S $FILE_NAME ] # socket
  9. [ -b $FILE_NAME ] # block
  10. [ -c $FILE_NAME ] # char
RONDOM

shell 的 $((RANDOM)) 会返回一个随机值

  1. if [ ${#} -eq 0 ]; then
  2. echo $((RANDOM))
  3. elif [ $1 == '--help' -o $1 == '-h' ]; then
  4. echo "usage: random num1, num2 [num1, num2)"
  5. elif [ ${#} -eq 1 ]; then
  6. echo $((RANDOM%$1))
  7. else
  8. echo $((RANDOM%(($2-$1))+$1))
  9. fi
数学
  1. echo $((100 / 3))
  2.  
  3. i=8
  4. echo $((i + 12))
  5.  
  6. i=8
  7. let i=5+3 # '=' 两侧不允许有空格
  8. i=$((i+1))
  9. let i++
控制流
  1. # if
  2. if [ xxx ]; then
  3. xxx
  4. elif [ xxx ]; then
  5. xxx
  6. else
  7. xxx
  8. fi
  9.  
  10. if [ xxx ] && [ xxx ]; then
  11. xxx
  12. fi
  13.  
  14. # while
  15. while [ xxx ]; do
  16. xxx
  17. done
  18.  
  19. while read line; do
  20. echo $line;
  21. done < input.txt;
  22.  
  23. # for
  24. for i in `seq 1 10`; do
  25. echo $i;
  26. done
  27.  
  28. for x in one two three four; do
  29. echo number $x
  30. done
  31.  
  32. # case
  33. x="start"
  34. case $x in
  35. start)
  36. echo 'start'
  37. ;;
  38. stop)
  39. echo "stop"
  40. ;;
  41. *)
  42. echo stop
  43. ;;
  44. esac
  45.  
  46. x="restart"
  47. case $x in
  48. start|restart)
  49. echo 'start'
  50. ;;
  51. stop)
  52. echo "stop"
  53. ;;
  54. *)
  55. echo stop
  56. ;;
  57. esac
函数
  1. myvar="hello"
  2. myfunc() {
  3. myvar="one two three"
  4. for x in $myvar; do
  5. echo $x
  6. done
  7. }
  8. myfunc # 执行函数
  9. echo $myvar $x # one two three (说明变量是全局的)
  1. myvar="hello"
  2. myfunc() {
  3. local x
  4. local myvar="one two three"
  5. for x in $myvar; do
  6. echo $x
  7. done
  8. }
  9. myfunc
  10. echo $myvar $x # hello ($x 没有输出)
  1. repeat() {
  2. while true; do
  3. $@ && return
  4. sleep 5
  5. done
  6. }
子 shell

子 shell 就是 () 里面的内容,相当于重新开启一个 shell。这样做的好处是 子 shell 里面做的事情不会影响到当前的 shell,比如定义变量,cd 到别的路径..

  1. pwd;
  2. (cd /bin; ls);
  3. pwd;
数组
  1. declare -A arr
  2. arr=([index1]='abc' [index2]='def')
  3. echo ${arr[index1]}
  4. echo ${arr['index1']}
  5.  
  6. arr[index3]='xyz'
  7. echo ${arr[index3]}
  1. for i in ${arr[@]}; do
  2. echo $i; # abc def xyz
  3. done
  4.  
  5. for i in ${!arr[@]}; do
  6. echo $i; # index1 index2 index3
  7. done
获取命令参数
  1. while getopts xyz opt; do
  2. case $opt in
  3. x)
  4. echo 'x'
  5. ;;
  6. y)
  7. echo 'y'
  8. ;;
  9. z)
  10. echo 'z'
  11. ;;
  12. ?)
  13. echo 'invalid'
  14. ;;
  15. esac
  16. done
  1. ./run -xyz (执行上面的代码)
  1. while getopts x:y:z: opt; do
  2. case $opt in
  3. x)
  4. echo 'x' $OPTARG
  5. ;;
  6. y)
  7. echo 'y' $OPTARG
  8. ;;
  9. z)
  10. echo 'z' $OPTARG
  11. ;;
  12. *)
  13. echo 'invalid'
  14. ;;
  15. esac
  16. done
  1. ./run -x abc -y def -z ghi

免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好:https://www.linuxprobe.com/

shell 笔记的更多相关文章

  1. bash&nbsp;shell笔记1&nbsp;脚本基础知识

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/505644 * ...

  2. Bash shell 笔记总结(一) 转自http://www.bubuko.com/infodetail-509992.html,谢谢原作者

    本文是上课笔记总结,涉及细节知识点会在以后文章说明! bash脚本编程: 脚本程序:解释器解释执行: shell: 交互式接口:编程环境: shell: 能够提供一些内部命令,并且能通过PATH环境变 ...

  3. Java中执行shell笔记

    在java中执行shell有好几种方式:第一种(exec)方式一 public static synchronized void runshell2() {    File superuser = n ...

  4. shell笔记

    shell:俗称操作系统的"外壳",就是命令解释程序.     是用户与Linux内核之间的接口.     是负责与用户交互,分析.执行用户输入的命令,并给出结果或出错提示.    ...

  5. shell笔记-local、export用法 、declare、set

    local一般用于局部变量声明,多在在函数内部使用.     1.    Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止.     2. ...

  6. shell笔记(基本知识)

    一.编写第一个shell程序 实例1: [程序] #!/bin/sh echo "hello word !" [运行]

  7. shell笔记-local、export用法

    local一般用于局部变量声明,多在在函数内部使用.    1.    Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止.    2.   ...

  8. 【转】Linux shell笔记

    由于工作的需要,越来越多的接触到linux系统.最近看了<Linux与Unix Shell>这本书,安装书的章节整理了一些自己认为比较重要的命令,方便以后查阅. No.001 文件安全与权 ...

  9. shell笔记-常用

    shell提取文件名: http://blog.csdn.net/u011544778/article/details/50773053 一.使用${} 1.${var##*/}该命令的作用是去掉变量 ...

随机推荐

  1. cocos中添加显示文字的三种方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)

    CCLabelTTF CCLabelTTF 每次调用 setString (即改变文字)的时候,一个新的OPENGL 纹理将会被创建..这意味着setString 和创建一个新的标签一样慢. 这个类使 ...

  2. 类似于QQ游戏百万人同时在线的服务器架构实现

    http://blog.csdn.net/sodme/article/details/213995 —————————————————————————————————————————————————— ...

  3. (转载)javascript函数作用域和提前声明

    http://www.cnblogs.com/ArthurPatten/p/3274080.html 一些语言如C.java都有块级作用域,即花括号内的每一段代码都具有各自的作用域,而且变量在声明它们 ...

  4. USB2.0规范

    USB是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据,最高速度可达480Mb/S. USB支持“总线供电”和“自供电”两种供电模式.在总线供电模式下,设备最多可以获得500mA的电流.U ...

  5. ems server

    自DELPHI XE7始提供企业移动服务,方便移动等设备通过REST+JSON访问中间件提供的服务. EMS (Enterprise Mobility Services企业移动服务) 服务器给EMS客 ...

  6. Python基础 列表

    ---***---传送门---***--- 文档解释 def append(self, p_object): """ L.append(object) -> Non ...

  7. poj 1247 The Perfect Stall 裸的二分匹配,但可以用最大流来水一下

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16396   Accepted: 750 ...

  8. This is a sandbox of markdown

    A First Level Header A Second Level Header Now is the time for all good men to come to the aid of th ...

  9. canvas加载gif

    http://ernestdelgado.com/public-tests/gifoncanvas/ <!DOCTYPE html><html><head> < ...

  10. Spring Bean生命周期

    1.Bean的建立:BeanFactory容器寻找Bean的定义信息,读取Bean定义文件,并将其实例化,生成各个Bean实例.2.属性注入:使用依赖注入,Spring按照Bean定义信息配置Bean ...