一、变量知识进阶

1.特殊的位置参数变量

实例1:测试$n(n为1...15)

  1. [root@codis-178 ~]# cat p.sh
  2. echo $1
  3. [root@codis-178 ~]# sh p.sh oldboy
  4. oldboy
  5. [root@codis-178 ~]# sh p.sh oldboy oldgirl
  6. oldboy
  7. [root@codis-178 ~]# sh p.sh "oldboy oldgirl"
  8. oldboy oldgirl

实例2:在脚本中同时加入$1和$2

  1. [root@codis-178 ~]# cat p.sh
  2. echo $1 $2
  3. [root@codis-178 ~]# sh p.sh longge bingbing
  4. longge bingbing
  5. [root@codis-178 ~]# sh p.sh "longge bingbing" oldgirl
  6. longge bingbing oldgirl

实例3:设置15个位置参数

  1. [root@codis-178 ~]# echo \${1..15}
  2. $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
  3. [root@codis-178 ~]# cat n.sh
  4. echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
  5. [root@codis-178 ~]# echo {a..z}
  6. a b c d e f g h i j k l m n o p q r s t u v w x y z
  7. [root@codis-178 ~]# sh n.sh {a..z}
  8. a b c d e f g h i a0 a1 a2 a3 a4 a5
  9. # 位置参数大于9,输出内容就不对了
  10. # 数字大于9时,需要大括号将数字括起来
  11. [root@codis-178 ~]# cat n.sh
  12. echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}
  13. [root@codis-178 ~]# sh n.sh {a..z}
  14. a b c d e f g h i j k l m n o

实例4:获取脚本的名称及路径

  1. [root@codis-178 ~]# cat n.sh
  2. echo $0
  3. # 不带路径时为脚本名
  4. [root@codis-178 ~]# sh n.sh
  5. n.sh
  6. # 全路径执行时为路径加脚本名
  7. [root@codis-178 ~]# sh /data/cron/n.sh
  8. /data/cron/n.sh

实例5:dirname和basename的用法

  1. [root@codis-178 ~]# dirname /data/cron/n.sh
  2. /data/cron
  3. [root@codis-178 ~]# basename /data/cron/n.sh
  4. n.sh

实例6:利用$0和dirname、basename分别取脚本名称和路径

  1. [root@codis-178 ~]# cat /data/cron/n.sh
  2. dirname $0
  3. basename $0
  4. [root@codis-178 ~]# sh /data/cron/n.sh
  5. /data/cron
  6. n.sh

实例7:生产环境中的脚本使用说明

  1. [root@codis-178 ~]# cat /data/cron/n.sh
  2. echo $"Usage: $0 {start|stop|status|restart|reload}"
  3. [root@codis-178 ~]# sh /data/cron/n.sh
  4. Usage: /data/cron/n.sh {start|stop|status|restart|reload}

实例8:通过$#获取脚本传参的个数

  1. [root@codis-178 ~]# cat n.sh
  2. echo $1 $2 $3 $4 $5 $6 $7 $8 $9
  3. echo $#
  4. [root@codis-178 ~]# sh n.sh {a..z}
  5. a b c d e f g h i
  6. 26

实例9:根据用户在命令行的传参个数判断用户的输入,不合要求的给予提示并退出

  1. [root@codis-178 ~]# cat t1.sh
  2. [ $# -ne 2 ] && {
  3. echo "must two args"
  4. exit 1
  5. }
  6. echo oldgirl
  7. [root@codis-178 ~]# sh t1.sh
  8. must two args
  9. [root@codis-178 ~]# sh t1.sh arg1 arg2
  10. oldgirl
  11. # 改良版
  12. [root@codis-178 ~]# cat t2.sh
  13. if [ $# -ne 2 ]
  14. then
  15. echo "USAGE:/bin/sh $0 arg1 arg2"
  16. exit 1
  17. fi
  18. echo $1 $2
  19. [root@codis-178 ~]# sh t2.sh
  20. USAGE:/bin/sh t2.sh arg1 arg2
  21. [root@codis-178 ~]# sh t2.sh oldboy oldgirl
  22. oldboy oldgirl

实例10:利用set设置位置参数,测试$#和$@

  1. # 设置三个字符串参数,--表示清除所有参数变量,重新设置后面的参数变量
  2. [root@codis-178 ~]# set -- "I am" handsome oldboy
  3. [root@codis-178 ~]# echo $#
  4. 3
  5. [root@codis-178 ~]# echo $1
  6. I am
  7. [root@codis-178 ~]# echo $2
  8. handsome
  9. [root@codis-178 ~]# echo $3
  10. oldboy
  11. # 不带双引号
  12. [root@codis-178 ~]# echo $*
  13. I am handsome oldboy
  14. [root@codis-178 ~]# echo $@
  15. I am handsome oldboy
  16. [root@codis-178 ~]# for i in $*;do echo $i;done
  17. I
  18. am
  19. handsome
  20. oldboy
  21. [root@codis-178 ~]# for i in $@;do echo $i;done
  22. I
  23. am
  24. handsome
  25. oldboy
  26. # 带双引号
  27. [root@codis-178 ~]# echo "$*"
  28. I am handsome oldboy
  29. [root@codis-178 ~]# echo "$@"
  30. I am handsome oldboy
  31. [root@codis-178 ~]# for i in "$*";do echo $i;done # 当做一个参数
  32. I am handsome oldboy
  33. [root@codis-178 ~]# for i in "$@";do echo $i;done # 每个参数独立输出
  34. I am
  35. handsome
  36. oldboy

实例11:生产环境中的引用,分析以下语句含义runlevel=$(set -- $(runlevel); eval "echo $$#" )

  1. # set是设置参数,这里设置的是runlevel的返回值作为参数
  2. # runlevel命令拿到运行级别
  3. [root@codis-178 ~]# runlevel
  4. N 3
  5. # $#是取命令有几个参数,上面的命令有2个返回参数
  6. # \$$#,就是$2,因为$#=2
  7. # eval是对之后的命令进行二次扫描,把echo的字符串,当做命令解析,首先扫描到echo输出$2,第二次解析$2的值为等级3

2.特殊的状态变量

实例1:执行命令后获取返回值

  1. # 不同命令的执行结果中的返回值也不相同,0为成功,非0为失败
  2. [root@codis-178 ~]# pwd
  3. /root
  4. [root@codis-178 ~]# echo $?
  5. 0
  6. [root@codis-178 ~]# ls /eee
  7. ls: cannot access /eee: No such file or directory
  8. [root@codis-178 ~]# echo $?
  9. 2
  10. [root@codis-178 ~]# oldboy
  11. -bash: oldboy: command not found
  12. [root@codis-178 ~]# echo $?
  13. 127

实例2:根据返回值来判断软件的安装步骤是否成功

  1. [root@codis-178 fping-3.10]# ./configure prefix=/usr/local/fping
  2. ...略过部分过程
  3. configure: creating ./config.status
  4. config.status: creating Makefile
  5. config.status: creating doc/Makefile
  6. config.status: creating src/Makefile
  7. config.status: creating config.h
  8. config.status: executing depfiles commands
  9. [root@codis-178 fping-3.10]# echo $?
  10. 0
  11. [root@codis-178 fping-3.10]# make
  12. ...略过部分过程
  13. make[2]: Leaving directory `/root/fping-3.10'
  14. make[1]: Leaving directory `/root/fping-3.10'
  15. [root@codis-178 fping-3.10]# echo $?
  16. 0
  17. [root@codis-178 fping-3.10]# make install
  18. ...略过部分过程
  19. make[2]: Leaving directory `/root/fping-3.10'
  20. make[1]: Leaving directory `/root/fping-3.10'
  21. [root@codis-178 fping-3.10]# echo $?
  22. 0

实例3:通过获取$?的返回值确定网站备份是否正确

  1. [root@codis-178 ~]# tar czvf /root/fping-3.10.tar.gz ./fping-3.10
  2. ...略过部分过程
  3. ./fping-3.10/config.guess
  4. ./fping-3.10/config.h
  5. [root@codis-178 ~]# echo $?
  6. 0

实例4:通过脚本控制命令及脚本执行后的返回值

  1. [root@codis-178 ~]# cat test4.sh
  2. [ $# -ne 2 ] && {
  3. echo "must be two args."
  4. exit 119 # 终止程序运行并指定119状态值赋值给$?
  5. }
  6. echo oldgirl
  7. [root@codis-178 ~]# sh test4.sh
  8. must be two args.
  9. [root@codis-178 ~]# echo $?
  10. 119
  11. [root@codis-178 ~]# sh test4.sh a1 a2
  12. oldgirl
  13. [root@codis-178 ~]# echo $?
  14. 0

在生产环境中的用法总结:

  • 判断命令、脚本、函数等程序是否执行成功
  • 若在脚本中调用执行"exit 数字",则会返回这个数字给"$?"变量
  • 如果是在函数里,则通过"return 数字"把这个数字以函数返回值的形式传给"$?"

实例5:获取脚本执行的进程号

  1. [root@codis-178 ~]# cat test_pid.sh
  2. echo $$ > /tmp/a.pid
  3. sleep 60
  4. [root@codis-178 ~]# sh test_pid.sh &
  5. [1] 1733
  6. [root@codis-178 ~]# ps -ef |grep test_pid|grep -v grep
  7. root 1733 28243 0 14:44 pts/0 00:00:00 sh test_pid.sh
  8. [root@codis-178 ~]# cat /tmp/a.pid
  9. 1733

实例6:实现系统中多次执行某一个脚本后的进程只有一个

  1. [root@codis-178 ~]# cat pid.sh
  2. #!/bin/sh
  3. pidpath=/tmp/a.pid
  4. if [ -f "$pidpath" ]
  5. then
  6. kill `cat $pidpath` > /dev/null 2>&1
  7. rm -f $pidpath
  8. fi
  9. echo $$ > $pidpath
  10. sleep 60
  11. [root@codis-178 ~]# sh pid.sh &
  12. [1] 4142
  13. [root@codis-178 ~]# ps -ef |grep pid.sh|grep -v grep
  14. root 4142 28243 0 15:27 pts/0 00:00:00 sh pid.sh
  15. [root@codis-178 ~]# sh pid.sh &
  16. [2] 4158
  17. [root@codis-178 ~]#
  18. [1]- Terminated sh pid.sh
  19. [root@codis-178 ~]# ps -ef |grep pid.sh|grep -v grep
  20. root 4158 28243 0 15:27 pts/0 00:00:00 sh pid.sh

实例7:$_获取上一条命令的最后一个参数

  1. [root@codis-178 ~]# /etc/init.d/ntpd start oldboy
  2. Starting ntpd: [ OK ]
  3. [root@codis-178 ~]# echo $_
  4. oldboy
  5. [root@codis-178 ~]# /etc/init.d/ntpd stop oldgirl
  6. Shutting down ntpd: [ OK ]
  7. [root@codis-178 ~]# echo $_
  8. oldgirl

实例8:$!获取上一次执行脚本的pid

  1. [root@codis-178 ~]# ps -ef |grep pid.sh|grep -v grep
  2. [root@codis-178 ~]# sh pid.sh &
  3. [1] 4439
  4. [root@codis-178 ~]# echo &!
  5. [2] 4450
  6. [root@codis-178 ~]# ps -ef |grep pid.sh|grep -v grep
  7. root 4439 28243 0 15:31 pts/0 00:00:00 sh pid.sh

二、Shell内置变量命令

1.常用的内部命令

echo、eval、exec、export、read、shift

2.内部命令用法

(1)echo:在屏幕输出信息

示例:

  1. [root@codis-178 ~]# echo oldboy;echo oldgirl
  2. oldboy
  3. oldgirl
  4. [root@codis-178 ~]# echo -n oldboy;echo oldgirl
  5. oldboyoldgirl
  6. [root@codis-178 ~]# echo "oldboy\toldgirl\noldboy\toldgirl"
  7. oldboy\toldgirl\noldboy\toldgirl
  8. [root@codis-178 ~]# echo -e "oldboy\toldgirl\noldboy\toldgirl"
  9. oldboy oldgirl
  10. oldboy oldgirl
  11. [root@codis-178 ~]# printf "oldboy\toldgirl\noldboy\toldgirl"
  12. oldboy oldgirl
  13. oldboy oldgirl
  14. [root@codis-178 ~]# echo -e "1\b23"
  15. 23
  16. [root@codis-178 ~]# printf "1\b23"
  17. 23

(2)eval:当Shell执行到eval语句时,读入参数args,并将它们组合成一个新的命令执行

示例:

  1. [root@codis-178 ~]# cat noeval.sh
  2. echo \$$#
  3. [root@codis-178 ~]# sh noeval.sh arg1 arg2
  4. $2
  5. [root@codis-178 ~]# cat noeval.sh
  6. eval "echo \$$#"
  7. [root@codis-178 ~]# sh noeval.sh arg1 arg2
  8. arg2
  9. # 使得打印的特殊位置参数重新解析输出,而不是$2

(3)exec:在不创建新的子进程的前提下,转去执行指定的命令,当命令执行完后,该进程终止

示例:

  1. [root@codis-178 ~]# exec date
  2. Wed Jul 12 15:46:37 CST 2017
  3. [xiaoda@codis-178 ~]$
  4. # 退到普通用户下
  5. # exec打开文件后,read每次将文件指针移动到下一行进行读取,直到文件末尾
  6. [xiaoda@codis-178 ~]$ seq 5 > /tmp/tmp.log
  7. [xiaoda@codis-178 ~]$ cat exec.sh
  8. exec < /tmp/tmp.log
  9. while read line
  10. do
  11. echo $line
  12. done
  13. echo ok
  14. [xiaoda@codis-178 ~]$ sh exec.sh
  15. 1
  16. 2
  17. 3
  18. 4
  19. 5
  20. ok

(4)read:从标准输入读取字符串等信息,传给Shell内部定义的变量

(5)shift:每使用一次,会使所有位置参数依次向左移动一个位置,并使$#减1,直到0为止

示例:

  1. [root@codis-178 ~]# cat n.sh
  2. echo $1 $2
  3. if [ $# -eq 2 ];then
  4. shift
  5. echo $1
  6. fi
  7. [root@codis-178 ~]# sh n.sh 1111 2222
  8. 1111 2222
  9. 2222

应用场景:

当shell命令行的命令通过参数控制不同的功能时,例如sh shift.sh -c oldboy,我们就拿到了第二个参数

(6)exit:退出Shell程序,可在后面指定一个数位作为返回值

三、Shell变量子串

1.子串介绍



2.子串的实践

  1. # 定义一个变量
  2. [root@codis-178 ~]# OLDBOY="I am oldboy"
  3. [root@codis-178 ~]# echo ${OLDBOY}
  4. I am oldboy
  5. [root@codis-178 ~]# echo $OLDBOY
  6. I am oldboy
  7. # 返回变量值得长度
  8. [root@codis-178 ~]# echo ${#OLDBOY}
  9. 11
  10. # 截取变量内容,也可理解为删除前面的多个字符
  11. [root@codis-178 ~]# echo ${OLDBOY:2}
  12. am oldboy
  13. [root@codis-178 ~]# echo ${OLDBOY:3}
  14. m oldboy
  15. [root@codis-178 ~]# echo ${OLDBOY:4}
  16. oldboy
  17. [root@codis-178 ~]# echo ${OLDBOY:2:2}
  18. am
  19. [root@codis-178 ~]# echo ${OLDBOY:2:5}
  20. am ol
  21. # 从变量内容的开头删除最短匹配"a*C"以及"a*c"的子串
  22. [root@codis-178 ~]# echo ${OLDBOY#a*C}
  23. 123ABCabc
  24. [root@codis-178 ~]# echo ${OLDBOY#a*c}
  25. ABC123ABCabc
  26. # 从变量内容的开头删除最长匹配"a*C"以及"a*c"的子串
  27. [root@codis-178 ~]# echo ${OLDBOY##a*C}
  28. abc
  29. [root@codis-178 ~]# echo ${OLDBOY##a*c}
  30. # 从变量内容的结尾删除最短匹配"a*C"以及"a*c"的子串
  31. [root@codis-178 ~]# echo ${OLDBOY%a*C}
  32. abcABC123ABCabc
  33. [root@codis-178 ~]# echo ${OLDBOY%a*c}
  34. abcABC123ABC
  35. # 从变量内容的结尾删除最长匹配"a*C"以及"a*c"的子串
  36. [root@codis-178 ~]# echo ${OLDBOY%%a*C}
  37. abcABC123ABCabc
  38. [root@codis-178 ~]# echo ${OLDBOY%%a*c}
  39. # 用oldgirl代替变量中匹配oldboy的子串
  40. [root@codis-178 ~]# echo ${OLDBOY/oldboy/oldgirl} # 替换第一个子串
  41. I am oldgirl,yes,oldboy
  42. [root@codis-178 ~]# echo ${OLDBOY//oldboy/oldgirl} # 全部替换
  43. I am oldgirl,yes,oldgirl

3.子串在生产环境中的应用

去掉下面所有文件的文件名中的_finished字符串

  1. [root@codis-178 log]# ls -l *.log
  2. -rw-r--r-- 1 root root 0 Jul 12 16:29 stu_102999_1_finished.log
  3. -rw-r--r-- 1 root root 0 Jul 12 16:29 stu_102999_2_finished.log
  4. -rw-r--r-- 1 root root 0 Jul 12 16:29 stu_102999_3_finished.log
  5. -rw-r--r-- 1 root root 0 Jul 12 16:29 stu_102999_4_finished.log
  6. -rw-r--r-- 1 root root 0 Jul 12 16:29 stu_102999_5_finished.log
  7. [root@codis-178 log]# for f in `ls *fin*.log`;do mv $f `echo ${f//_finished/}`;done
  8. [root@codis-178 log]# ls -l *.log
  9. -rw-r--r-- 1 root root 0 Jul 12 16:29 stu_102999_1.log
  10. -rw-r--r-- 1 root root 0 Jul 12 16:29 stu_102999_2.log
  11. -rw-r--r-- 1 root root 0 Jul 12 16:29 stu_102999_3.log
  12. -rw-r--r-- 1 root root 0 Jul 12 16:29 stu_102999_4.log
  13. -rw-r--r-- 1 root root 0 Jul 12 16:29 stu_102999_5.log
  14. 进阶版1
  15. ls |awk -F 'finished' '{print "mv "$0" "$1$2" "}'|/bin/bash
  16. 进阶版2
  17. rename "_finished" "" *

说明:

1)${f//_finished/}利用变量子串替换功能把变量$f里的finished替换为空

2)利用for循环依次拿到文件名

3)利用mv命令修改,注意目标命令要用反引号括起来

面试题:

编写Shell脚本以打印下面语句中字符数小于6的单词

I am oldboy linux,welcome to our training.

四、特殊扩展变量

1.特殊扩展变量介绍

2.特殊扩展变量实践

  1. # ${parameter:-word}作用是如果parameter变量值为空或未赋值,则返回word字符串替代变量的值
  2. [root@codis-178 log]# echo $test
  3. [root@codis-178 log]# result=${test:-UNSET}
  4. [root@codis-178 log]# echo $result
  5. UNSET
  6. [root@codis-178 log]# test=oldboy
  7. [root@codis-178 log]# echo ${test}
  8. oldboy
  9. [root@codis-178 log]# result=${test:-UNSET}
  10. [root@codis-178 log]# echo $result # 变量是否已定义
  11. oldboy
  12. [root@codis-178 log]# result=${test-UNSET}
  13. [root@codis-178 log]# echo $result
  14. oldboy
  15. # ${parameter:=word}作用是如果变量值为空或未赋值,就设置这个变量值为word,并返回其值
  16. (位置变量和特殊变量不适用)
  17. [root@codis-178 log]# unset result # 撤销result变量定义
  18. [root@codis-178 log]# echo $result
  19. [root@codis-178 log]# unset test
  20. [root@codis-178 log]# echo $test
  21. [root@codis-178 log]# result=${test:=UNSET}
  22. [root@codis-178 log]# echo $result
  23. UNSET
  24. [root@codis-178 log]# echo $test
  25. UNSET
  26. # ${parameter:?word}作用是如果变量值为空或未赋值,word字符串将被作为标准错误输出
  27. # 用于变量未定义而报错的具体内容
  28. [root@codis-178 log]# echo ${key:?not defined}
  29. -bash: key: not defined
  30. [root@codis-178 log]# key=1
  31. [root@codis-178 log]# echo ${key:?not defined}
  32. 1
  33. [root@codis-178 log]# unset key
  34. [root@codis-178 log]# echo ${key:?not defined}
  35. -bash: key: not defined
  36. # ${parameter:+word}作用是如果变量值为空或未赋值,则什么都不做,否则word字符串将替代变量的值
  37. [root@codis-178 log]# oldboy=${oldgirl:+word}
  38. [root@codis-178 log]# echo $oldboy
  39. [root@codis-178 log]# oldgirl=19
  40. [root@codis-178 log]# oldboy=${oldgirl:+word}
  41. [root@codis-178 log]# echo $oldboy
  42. word

3.特殊扩展变量在生产环境中的应用案例

针对目录路径等的处理可以采用上述变量不存在的方式,防止因目录路径不存在而导致的异常。

实例:删除7天前的过期数据备份

如果忘记了定义path变量,又不希望path值为空,就可以定义/tmp替代path为返回值

  1. [root@codis-178 log]# cat del.sh
  2. find ${path-/tmp} -name "*.log" -type f -mtime +7|xargs rm -f
  3. [root@codis-178 log]# sh -x del.sh
  4. + find /tmp -name '*.log' -type f -mtime +7
  5. + xargs rm -f

Shell编程之变量进阶的更多相关文章

  1. Linux学习——shell编程之变量

    shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...

  2. Linux —— Shell编程之变量赋值和引用

    Linux的shell编程是一种非常成熟的编程语言,它支持各种类型的变量.有三种主要的变量类型:环境变量.内部变量和用户变量. 环境变量(environment variable)是系统环境的一部分, ...

  3. Linux编程 21 shell编程(环境变量,用户变量,命令替换)

    一.概述 这篇介绍shell的变量使用,跟其实语言一样,都有声明变量,使用变量,在shell中变量允许你临时地将信息存储中shell脚本中,以便和脚本的其他命令一起使用. 1.1 环境变量 在前面章节 ...

  4. Shell编程-02-Shell变量

    目录 什么是Shell变量 变量类型 环境变量初始化及其对应文件的生效顺序 什么是Shell变量     在初等数学数学方程式中,我们会经常碰到类似于这样的方程式:y=x+1 ,等号左右两边的x和y称 ...

  5. Linux Shell编程、变量、控制语句

    为什么要学习Shell编程 1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理. 2)对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些 ...

  6. linux shell编程之变量和bash配置文件(第一篇)

    编程语言有两类 强类型:如C语言.数据具有其特定的类型,先声明定义后才能使用.数据运算时必须符合类型要求(如不能把字符串类型数据直接与整型数据做算数运算) 弱类型:如shell.数据默认为字符型,不用 ...

  7. SHELL编程概念&变量剖析

    一.shell软件概念和应用场景 1) 学习Linux技术,不是为了学习系统安装.命令操作.用户权限.配置IP.网络管理,学习Linux技术重点:基于Linux系统部署和维护各种应用软件.程序(Apa ...

  8. Shell 编程 (变量和条件测试)

    变量: 1 . 变量声明 直接使用变量 + 赋值 #!/bin/bash NAME='HELLO WORD' echo $NAME 使用 declare 关键字声明 declare(选项)(参数) + ...

  9. Shell编程——环境变量

    在Shell程序启动时会自动定义一组变量,这组变量就是环境变量,系统中的所有命令都可以使用这些变量参数. 1.如果在父Shell定义环境变量,在子Shell中也能查看到. (1)父Shell与子She ...

随机推荐

  1. Windows下使用python

    Windows下使用python,一般安装python就有IDLE了,再这个里面使用就好了,很方便 安装完之后.py的文件右键会有Edit with IDLE,可是我脑残想要默认打开就是IDLE,结果 ...

  2. CSS3之body背景图平铺

    你再也不需要因为屏幕大小不同而去选择多张图片作为背景图了,css3教你做人: body { background: url('xx.jpg')top center no-repeat; backgro ...

  3. python 集合set remove update add

    1. 集合(set):把不同的元素组成一起形成集合,是python基本的数据类型. 集合对象是一组无序排列hashable value:集合成员可以做字典的键. 集合就像是 list 和 dict 的 ...

  4. KMP hihoCoder1015 KMP算法

    人太蠢,,看了一天的KMP.. 刚開始看训练指南的,,后来才惊奇的发现原来刘汝佳写的f数组并非Next数组! 总认为和之前看过的全然不一样.. . 后来又百度了一下KMP,研究了非常久,然后用自己的逻 ...

  5. OpenCV学习笔记二:OpenCV模块一览

    注:本系列博客基于OpenCV 2.9.0.0 一,一览图: 二,模块: /* 基础库 */ 1,opencv_core(链接) ,opencv最基础的库.包含exception,point,rect ...

  6. easyui datagrid加载数据的两种方式

    1.加载本地数据 var obj = {"total":2,"rows":[{id:"1",name:"一"},{id: ...

  7. 在部署有OGG的数据库主机上打数据库patch遇到的问题libclntsh.so.11.1 active

    在部署有OGG的数据库主机上打数据库patch遇到的问题$ORACLE_HOME/lib/libclntsh.so.11.1 active 例如以下是报错提示: [oracle@lei1 175796 ...

  8. ssh常用

    目录操作:rm -rf mydir /*删除mydir目录*/mkdir dirname /*创建名为dirname的目录*/cd mydir /*进入mydir目录*/cd – /*回上一级目录*/ ...

  9. 控制bin文件夹里面的dll不复制到临时目录中( <hostingEnvironment shadowCopyBinAssemblies="false" />)

    One of the things that makes developing ASP.NET applications very cool is that you can rapidly proto ...

  10. 机器重启 查看crontab执行历史记录crontab没有执行

    Sep 17 19:01:01 d run-parts(/etc/cron.hourly)[8452]: finished 0anacronSep 17 19:10:01 d CROND[9059]: ...