Linux shell
文章平均质量分 54
尹成
尹成微信18510341407,助理微信18514203048
展开
-
Linux Shell编程(1)——shell编程简介
Shell是一个命令解释器。它不仅是操作系统内核与用户之间的绝缘层,同时也是一种功能相当强大的编程语言。一个Shell程序,通常称为脚本,它是一个由系统调用,命令工具,软件包和已编译的二进制包"粘合" 起来的极易使用的工具。事实上,整个UNIX系统命令,软件包和工具都能由一个shell脚本调用。如果这还不够,Shell的内部命令,比如测试和循环结构,都使Shell脚本更强大和更有弹性。Shell脚原创 2014-09-30 07:07:30 · 2427 阅读 · 0 评论 -
Linux Shell编程(18)—— 循环控制
影响循环行为的命令break, continuebreak和continue这两个循环控制命令[1]与其它语言的类似命令的行为是相同的. break命令将会跳出循环,continue命令将会跳过本次循环下边的语句,直接进入下次循环..例子:break和continue命令在循环中的效果#!/bin/bashLIMIT=19 # 上限echoecho "Printing Number原创 2014-09-30 07:55:26 · 1958 阅读 · 0 评论 -
Linux Shell编程(19)——测试与分支
case和select结构在技术上说不是循环,因为它们并不对可执行的代码块进行迭代.但是和循环相似的是,它们也依靠在代码块的顶部或底部的条件判断来决定程序的分支.在代码块中控制程序分支case (in) / esac在shell中的case同C/C++中的switch结构是相同的.它允许通过判断来选择代码块中多条路径中的一条.它的作用和多个if/then/else语句相同,是它们的简化结构,特别适原创 2014-09-30 07:57:14 · 2185 阅读 · 0 评论 -
Linux Shell编程(20)——基本命令
新手必须要掌握的初级命令ls基本的列出所有文件的命令.但是往往就是因为这个命令太简单,所以我们总是低估它.比如,用 -R 选项,这是递归选项,ls 将会以目录树的形式列出所有文件, 另一个很有用的选项是 -S ,将会按照文件尺寸列出所有文件, -t, 将会按照修改时间来列出文件,-i 选项会显示文件的inodecat, taccat, 是单词 concatenate的缩写, 把文件的内容输出到st原创 2014-09-30 08:01:10 · 2272 阅读 · 0 评论 -
Linux Shell编程(21)——复杂命令
更高级的用户命令find-exec COMMAND \;在每一个find 匹配到的文件执行 COMMAND 命令. 命令序列以 ; 结束( ";" 是 转义符 以保证 shell 传递到find命令中的字符不会被解释为其他的特殊字符).xargs这是给命令传递参数的一个过滤器, 也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块, 以方便过滤器和命令进行处理. 由此这个命令也是后置引用原创 2014-09-30 08:02:26 · 2888 阅读 · 0 评论 -
Linux Shell编程(22)——时间/日期 命令
date直接调用, date 就会打印日期和时间到 stdout 上. 这个命令有趣的地方在于它的格式化和分析选项上.time输出统计出来的命令执行的时间.touch这是一个用来更新文件被存取或修改的时间的工具,这个时间可以是当前系统的时间,也可以是指定的时间, 这个命令也用来产生一个新文件.Example:使用 date 命令#!/bin/bash# 练习 'date' 命令echo "原创 2014-09-30 08:04:23 · 4224 阅读 · 0 评论 -
Linux Shell编程(23)——文本处理命令
处理文本和文本文件的命令sort文件排序, 通常用在管道中当过滤器来使用. 这个命令可以依据指定的关键字或指定的字符位置, 对文件行进行排序. 使用 -m 选项, 它将会合并预排序的输入文件. 想了解这个命令的全部参数请参考这个命令的 info 页. 见 Example 10-9, Example 10-10, 和 Example A-8.tsort拓扑排序 ,读取以空格分隔的有序对, 并且依靠输原创 2014-09-30 08:08:02 · 2734 阅读 · 0 评论 -
Linux Shell编程(24)——命令替换
命令替换 将会重新分配一个命令[1]甚至是多个命令的输出; 它会将命令的输出如实地添加到另一个上下文中. [2]使用命令替换的典型形式是使用后置引用(`...`). 后置引用形式的命令(就是被反引号括起来)将会产生命令行文本. 1 script_name=`basename $0` 2 echo "The name of this script is $script_name."这样的话,原创 2014-09-30 08:10:41 · 2757 阅读 · 0 评论 -
Linux Shell编程(25)——I/O 重定向
默认情况下始终有3个"文件"处于打开状态, stdin (键盘), stdout (屏幕), and stderr (错误消息输出到屏幕上). 这3个文件和其他打开的文件都可以被重定向. 对于重定向简单的解释就是捕捉一个文件, 命令, 程序, 脚本, 或者甚至是脚本中的代码块(参见 Example 3-1 和 Example 3-2)的输出, 然后将这些输出作为输入发送到另一个文件, 命令, 程序原创 2014-09-30 08:13:33 · 2722 阅读 · 0 评论 -
Linux Shell编程(26)——代码块重定向
像 while, until, 和 for 循环代码块, 甚至 if/then 测试结构的代码块都能做到标准输入的重定向. 即使函数也可以使用这种重定向的格式 。所有的这些依靠代码块结尾的 例子:while 循环的重定向#!/bin/bash# redir2.shif [ -z "$1" ]then Filename=names.data # 如果没有指定文件名,则指定这原创 2014-09-30 08:13:48 · 3402 阅读 · 1 评论 -
Linux Shell编程(28)——进程替换
进程替换与命令替换很相似. 命令替换把一个命令的结果赋给一个变量,例如 dir_contents=`ls -al`或xref=$. 进程替换则是把一个进程的输出回馈给另一个进程 (换句话说,它把一个命令的结果发送给另一个命令).命令替换的一般形式由圆括号括起的命令>(command)启动进程替换. 它是用/dev/fd/文件把在圆括号内的进程的处理结果发送给另外一个进程. 在"" 与圆括号之间是没原创 2014-09-30 08:18:33 · 4457 阅读 · 1 评论 -
Linux Shell编程(27)——子shell
运行一个shell脚本时会启动另一个命令解释器. 就好像你的命令是在命令行提示下被解释的一样, 类似于批处理文件里的一系列命令.每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.shell脚本也能启动他自已的子进程. 这些子shell(即子进程)使脚本并行地,有效率地地同时运行多个子原创 2014-09-30 08:17:59 · 3044 阅读 · 0 评论 -
Linux Shell编程(29)——函数
和"真正的"编程语言一样, Bash也有函数,虽然在某些实现方面稍有些限制. 一个函数是一个子程序,用于实现一串操作的代码块,它是完成特定任务的"黑盒子". 当有重复代码, 当一个任务只需要很少的修改就被重复几次执行时, 这时你应考虑使用函数.function function_name { command... } 或function_name () { command... } 第二种格式的写原创 2014-09-30 08:20:07 · 2754 阅读 · 1 评论 -
Linux Shell编程(30)——别名
Bash别名本质上是一个简称, 缩写, 这可避免键入过长的命令序列. 例如,如果我们添加 alias lm="ls -l | more" 这一行到文件~/.bashrc file里, 然后每次在命令行键入lm 将会自动被替换成ls -l | more. 这使用户在命令行不必键冗长的命令序列也避免了记忆复杂的命令及众多选项. 设置alias rm="rm -i" (交互式删除)可以使你犯下错误时不必原创 2014-09-30 08:22:16 · 3285 阅读 · 0 评论 -
Linux Shell编程(17)——嵌套循环
嵌套循环就是在一个循环中还有一个循环,内部循环在外部循环体中.在外部循环的每次执行过程中都会触发内部循环,直到内部循环执行结束.外部循环执行了多少次,内部循环就完成多少次.当然,不论是外部循环或内部循环的break语句都会打断处理过程.例子:嵌套循环#!/bin/bash# nested-loop.sh: 嵌套的"for" 循环.outer=1 # 设置外部循环计数原创 2014-09-30 07:55:27 · 14150 阅读 · 0 评论 -
Linux Shell编程(16)——循环
循环就是重复一些命令的代码块,如果条件不满足就退出循环.for loopsfor arg in [list]这是一个基本的循环结构.它与C的for结构有很大不同. 在循环的每次执行中,arg将顺序的存取list中列出的变量.for arg in "$var1" "$var2" "$var3" ... "$varN" # 在第1次循环中, arg = $var1 # 在第2次循环中, ar原创 2014-09-30 07:52:57 · 1967 阅读 · 0 评论 -
Linux Shell编程(2)——第一个shell程序
在最简单的情况下,脚本程序不过是存储在一个文件里的系统命令列表。这至少让你执行它 时不必重新按顺序键入相同功能的命令序列。一个清空/var/log目录下的日志文件的脚本# Cleanup# 必须以root用户运行. cd /var/logcat /dev/null > messagescat /dev/null > wtmpecho "Logs cleaned up."这没有什么不同寻原创 2014-09-30 07:10:40 · 2003 阅读 · 0 评论 -
Linux Shell编程(3)——运行shell脚本
写完一个脚本,你能够运行它用命令:sh scriptname, [5] 另外也也可以用bash scriptname. 来执行(不推荐使用:sh 你可以:chmod 555 scriptname (使每个人都有读和执行的权限) [6]也可以:chmod +rx scriptname (使每个人都有读和执行的权限)chmod u+rx scriptname (仅仅使脚本文件拥有者有读和执行的权限)在原创 2014-09-30 07:13:32 · 1687 阅读 · 0 评论 -
Linux Shell编程(4)——shell特殊字符(上)
在脚本或其他别的地方出现的特殊字符#注释. 以一个#开头的行 (#!是例外) 是注释行.# 这是一行注释.注释也可以出现在一个命令语句的后面。echo "A comment will follow." # 这里可以添加注释.# ^ 注意在#前面可以有空白符 #注释行前面也可以有空白字符. #注意这个注释行的开头是一个TAB键. 在同一行中,命令原创 2014-09-30 07:18:14 · 1835 阅读 · 0 评论 -
Linux Shell编程(5)——shell特殊字符(下)
{}代码块[花括号]. 这个结构也是一组命令代码块,事实上,它是匿名的函数。然而与一个函数所不同的,在代码块里的变量仍然能被脚本后面的代码访问。 bash$ { local a; a=123; } bash: local: can only be used in afunction a=123{ a=321; }echo "a = $a" # a = 321 (结原创 2014-09-30 07:18:34 · 1539 阅读 · 0 评论 -
Linux Shell编程(6)——变量替换
变量的名字是它的值保存的地方。引用它的值称为变量替换。$让我们仔细地区别变量和变量的值。如果variable1是一个变量的名字,那么$variable1就是引用这个变量的值――即这个变量它包含的数据。如果只有变量名出现(即指没有前缀$),那就可能是在1)声明一个变量或是在给这个变量赋值。2)声明废弃这个变量,3)导出(exported)变量,4)或是在变量指示的是一种信号的特殊情况。(参考例子 2原创 2014-09-30 07:21:22 · 1992 阅读 · 0 评论 -
Linux Shell编程(7)——变量赋值
=赋值操作符(它的左右两边不能有空白符) 不要搞混了=和-eq,-eq是比赋值操作更高级的测试。注意:等于号(=)根据环境的不同它可能是赋值操作符也可能是一个测试操作符。例子:简单的变量赋值#!/bin/bash# 裸变量echo# 什么时候变量是“裸”的?比如说,变量名前面没有$?#当变量被赋值而不是引用时,我们称它为是裸变量。# 赋值a=879echo "The value of \"a\"原创 2014-09-30 07:21:21 · 2517 阅读 · 0 评论 -
Linux Shell编程(8)——变量详解
不同与许多其他的编程语言,Bash不以"类型"来区分变量。本质上来说,Bash变量是字符串,但是根据环境的不同,Bash允许变量有整数计算和比较。其中的决定因素是变量的值是不是只含有数字.例子 #!/bin/basha=2334 # 整数.let "a += 1"echo "a = $a " # a = 2335echo原创 2014-09-30 07:24:22 · 1802 阅读 · 0 评论 -
Linux Shell编程(9)——特殊变量类型
局部变量局部变量只在代码块或一个函数里有效 (参考函数里的局部变量)环境变量这种变量会影响Shell的行为和用户接口 在大多数情况下,每个进程都会有一个"环境表", 它由一组由进程使用的环境变量组成。这样看来,Shell看起来和其他的进程一样。每次一个Shell启动时,它都会创建新的合适的环境变量。如果它增加或是更新一个环境变量,都会使这个Shell的环境表得到更新(译者注:换句话说,更改或增加的原创 2014-09-30 07:26:29 · 1849 阅读 · 0 评论 -
Linux Shell编程(10)——引用变量
当要引用一个变量的值时,一般推荐使用双引号。使用双引号除了变量名前缀($)、后引符(`)和转义符(\)外,会使shell不再解释引号中其它所有的特殊字符。用双引号时$仍被当成特殊字符,允许引用一个被双引号引起的变量("$variable"), 那也是说$variable会被它的值所代替。用双引号还能使句子不被分割开.一个参数用双引号引起来能使它被看做一个单元,这样即使参数里面包含有空白字符也不会被原创 2014-09-30 07:28:55 · 4574 阅读 · 1 评论 -
Linux Shell编程(11)——退出和退出状态
exit命令一般用于结束一个脚本,就像C语言的exit一样。它也能返回一个值给父进程。每一个命令都能返回一个退出状态(有时也看做返回状态).一个命令执行成功返回0,一个执行不成功的命令则返回一个非零值,此值通常可以被解释成一个对应的错误值。除了一些例外的情况,一个行为端庄的UNIX命令,程序或是软件包执行成功能返回0的作为退出码。同样的,在脚本里的函数和脚本自身都会返回一个退出状态码。在脚本或函数原创 2014-09-30 07:30:50 · 4934 阅读 · 0 评论 -
Linux Shell编程(12)——操作符
赋值变量赋值初始化或改变一个变量的值=通用的变量赋值操作符,可以用于数值和字符串的赋值 1 var=27 2 category=minerals # "="字符后面不能加空白字符. 不要把"="赋值操作符和=测试操作符搞混了。 # = 用于测试操作符 3 if [ "$string1" = "$string2" ] 4 # if [ "X$string1" = "X$st原创 2014-09-30 07:35:13 · 1814 阅读 · 0 评论 -
Linux Shell编程(13)——数字常量
除非一个数字有特别的前缀或符号,否则shell脚本把它当成十进制的数。一个前缀为0的数字是八进制数。一个前缀为0x的数字是十六进制数。一个数用内嵌的#来求值则看成BASE#NUMBER(有范围和符号限制)例子:数字常量的表示法#!/bin/bash# numbers.sh: 不同基数的数字表示法.# 十进制数: 它是默认的let "dec = 32"echo "decimal number = $原创 2014-09-30 07:34:49 · 3414 阅读 · 0 评论 -
Linux Shell编程(14)——内部变量
内建变量影响Bash脚本行为的变量。$BASHBash二进制程序文件的路径 bash$ echo $BASH /bin/bash$BASH_ENV该环境变量保存一个Bash启动文件路径,当启动一个脚本程序时会去读该环境变量指定的文件。$BASH_SUBSHELL一个指示子shell(subshell)等级的变量。它是Bash版本3新加入的。$BASH_VERSINFO[n]这个数组含有6个元素,指原创 2014-09-30 07:49:06 · 2086 阅读 · 0 评论 -
Linux Shell编程(15)——操作字符串
Bash已经支持了令人惊讶的字符串操作的数量。不幸地,这些工具缺乏统一的标准。一些是参数替换的子集,其它受到UNIX的expr命令的功能的影响。这导致不一致的命令语法和冗余的功能,但这些并没有引起混乱。字符串长度${#string}expr length $stringexpr "$string" : '.*'stringZ=abcABC123ABCabcecho ${#stringZ}原创 2014-09-30 07:51:26 · 2070 阅读 · 0 评论 -
python库大全
环境管理管理 Python 版本和环境的工具p:非常简单的交互式 python 版本管理工具。官网 pyenv:简单的 Python 版本管理工具。官网 Vex:可以在虚拟环境中执行命令。官网 virtualenv:创建独立 Python 环境的工具。官网 virtualenvwrapper:virtualenv 的一组扩展。官网 包管理管理包和依赖的工具。pip:Python 包和依赖关原创 2017-09-01 02:14:24 · 4984 阅读 · 3 评论