Shell简介
简介
Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内部。
shell脚本
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
shell环境
Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。Linux 的 Shell 种类众多,常见的有:
?Bourne Shell(/usr/bin/sh或/bin/sh)
?Bourne Again Shell(/bin/bash)
? C Shell(/usr/bin/csh)
?K Shell(/usr/bin/ksh)
?Shell for Root(/sbin/sh)
?……
本教程关注的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像#!/bin/sh,它同样也可以改为
#!/bin/bash。
#!告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
Shell语言简介 简介: Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,毕竟它使用了Linux/Unix下的命令。 换一种说法也就是,shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本本件,将一些shell的语法与指令写在里面,然后用正规表示法,管线命令以及数据流重导向等功能,以达到我们所想要的处理目的。 更明白的来说,shell script就像早期dos年代的.bat,最简单的功能就是将许多指令汇整写一起,让使用者很容易的就能够一个操作执行多个命令,而shell script更是提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法。 shell和shell脚本的区别: shell是什么呢?确切一点说,Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。Shell 本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言(就是你所说的shell脚本)。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。 当命令不在命令行执行时,而是从一个文件中执行时,该文件就称为shell脚本,脚本以非交互方式运行。 当bash shell以非交互方式运行时,它现查找环境变量BASH_ENV(ENV),该变量指定了一个环境文件(通常是.bashrc),然后从该文件开始执行。当BASH_ENV文件执行后,shell 就开始执行脚本中的命令,shell就开始执行脚本中的命令。bash以非交互方式运行时,如果带选项-norc或--norc,则不执行BASH_ENV文件。 创建shell脚本的步骤 shell脚本通常是编辑器中编写,由命令和散布其间的注释组成,注释是跟在#号后面的内容,用来对脚本作注解。 第一行 位于脚本左上角第一行会指出要用哪个程序来执行脚本中的行。这一行通常称为sh#行,写作:#!/bin/bash #!被称为幻数,内核根据它来确定该用哪个程序来翻译脚本中的行。这一行必须是脚本顶端第一行。 注释 注释是跟在#号后的行。 可执行语句与bash shell结构 一个bash shell程序由一组unix命令,bash shell命令,编程结构和注释组成。 使脚本可执行 当你创建文件时,文件并没有被自动授予执行权限,如果要运行脚本就必须给它执行权限。
BASH 的基本语法 最简单的例子——Hello World! 关于输入、输出和错误输出 BASH 中对变量的规定(与C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1 最简单的例子——Hello World! 几乎所有的讲解编程的书给读者的第一个例子都是Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解BASH。 用vi 编辑器编辑一个hello 文件如下: #!/bin/bash # This is a very simple example echo Hello World 这样最简单的一个BASH 程序就编写完了。这里有几个问题需要说明一下: 一,第一行的#! 是什么意思 二,第一行的/bin/bash 又是什么意思 三,第二行是注释吗 四,echo 语句 五,如何执行该程序 #! 是说明hello 这个文件的类型的,有点类似于Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。Linux 系统根据"#!" 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过"man magic"命令及/usr/share/magic 文件来了解这方面的更多内容。在BASH 中第一行的"#!" 及后面的"/bin/bash" 就表明该文件是一个BASH 程序,需要由/bin 目录下的bash 程序来解释执行。BASH 这个程序一般是存放在/bin 目录下,如果你的Linux 系统比较特别,bash 也有可能被存放在/sbin 、/usr/local/bin 、/usr/bin 、/usr/sbin 或/usr/local/sbin 这样的目录下;如果还找不到,你可以用"locate bash" "find / -name bash 2> /dev/null" 或"whereis bash" 这三个命令找出bash 所在的位置;如果仍然找不到,那你可能需要自己动手安装一个BASH 软件包了。 第二行的"# This is a ..." 就是BASH 程序的注释,在BASH 程序中从“#”号(注意:后面紧接着是“!”号的除外)开始到行尾的多有部分均被看作是程序的注释。的三行的echo 语句的功能是把echo 后面的字符串输出到标准输出中去。由于echo 后跟的是"Hello World" 这个字符串,因此"Hello World"这个字串就被显示在控制台终端的屏幕上了。需要注意的是BASH 中的绝大多数语句结尾处都没有分号。 如何执行该程序呢?有两种方法:一种是显式制定BASH 去执行:
linux shell脚本语言基础知识 一.shell简介 Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的界面,更确切的说,shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用Shell脚本编程,完成更加复杂的操作。 shell是一个命令解释器,它从输入设备读取命令,再将其转为计算机可以了解的指令,然后执行它。在linux中,shell又不仅是简单的命令解释器,而且是一个全功能的编程环境。 Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell (/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell语言的语法有所不同,所以不能交换使用。每种Shell都有其特色之处,基本上,掌握其中任何一种就足够了。通常用Bash,也就是Bourne Again Shell进行编程。 二.shell使用 1.建立和运行shell程序 shell脚本程序:按照一定的语法结构把若干linux命令组织在一起,是这些命令按照我们的要求完成一定的功能。它可以进行类似程序的编写,并且不需要编译就能执行。(只需修改其权限) 像编写高级语言的程序一样,编写shell程序需要一个文本编辑器,如VI和VIM,通常使用VIM文本编辑器,支持更便利的插入模式。 首先使用VIM编辑器编辑一个hello.sh文件: #!/bin/bash #hello world example
Shell中Read用法简介 一. read读取单个词. $read name $tony ma $echo $name tony ma $read id passwd $allen passwd $echo $id $allen $echo $passwd $passwd $read id passwd $allen kaka gogo $echo $id $allen $echo $passwd $kaka gogo 二. read读取整行. 利用while循环来使read读取整行。 以下是代码清单: 1 #!/bin/bash 2 lineno=1 3 cat $* | 4 while read -r line 5 do 6 echo "$lineno: $line" 7 lineno=$((lineno + 1)) 8 done 三. read的嵌套. 1)while外层的read依次读取的是文件pbook中的每一行,而内层的read是从console读取的内容。 2)要实现while read的嵌套,可以使用exec命令,将I/O重定向。
注意exec的用法,以及括号的使用。 1 #!/bin/bash 2 echo -n "Enter name to be removed: " 3 read name 4 p=$(grep "$name " phonebook | wc -l) 5 echo $p 6 if [ "$p" -gt 1 ] 7 then 8 echo "More than one match ; Please select the one to remove;" 9 grep "$name " phonebook > pbook 10 cat pbook | while read line 11 do( 12 echo -n "$line Remove(y/n)?" 13 exec < /dev/tty 14 read answer 15 if [ "$answer" = y ] 16 then 17 grep -v "^$line$" phonebook > /tmp/phonebook.tmp 18 mv /tmp/phonebook.tmp phonebook 19 else 20 continue 21 fi 22 ) 23 done 24 else 25 grep -v "^$line$" phonebook > /tmp/phonebook.tmp 26 mv /tmp/phonebook.tmp phonebook 27 fi 28 cat phonebook
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell 是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统的关键。可以说,shell使用的熟练程度反映了用户对Linux使用的熟练程度。 一、什么是shell 当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shel l(外壳)的程序。那么,shell是什么呢?确切一点说,shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell 来启动、挂起、停止甚至是编写一些程序。 当用户使用Linux时是通过命令来完成所需工作的。一个命令就是用户和shell之间对话的一个基本单位,它是由多个字符组成并以换行结束的字符串。shell解释用户输入的命令,就象DOS里的https://www.wendangku.net/doc/f413624857.html,所做的一样,所不同的是,在DOS中,https://www.wendangku.net/doc/f413624857.html,只有一个,而在Linux下比较流行的shell有好几个,每个shell都各有千秋。一般的Linux系统都将bash作为默认的shell。 二、几种流行的shell 目前流行的shell有ash、bash、ksh、csh、zsh等,你可以用下面的命令来查看你自己的shell类型: #echo $SHELL $SHELL是一个环境变量,它记录用户所使用的shell类型。你可以用命令: #shell-name 来转换到别的shell,这里shell-name是你想要尝试使用的shell的名称,如ash等。这个命令为用户又启动了一个shell,这个shell在最初登录的那个shell之后,称为下级的shell或子shell。使用命令: $exit 可以退出这个子shell。 使用不同的shell的原因在于它们各自都有自己的特点,下面作一个简单的介绍: 1.ash ash shell是由Kenneth Almquist编写的,Linux中占用系统资源最少的一个小shell,它只包含24个内部命令,因而使用起来很不方便。 2.bash bash是Linux系统默认使用的shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的缩写,内部命令一共有40个。Linux使用它作为默认的shell是因为它有诸如以下的特色: (1)可以使用类似DOS下面的doskey的功能,用方向键查阅和快速输入并修改命令。 (2)自动通过查找匹配的方式给出以某字符串开头的命令。 (3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。 3.ksh ksh是Korn shell的缩写,由Eric Gisin编写,共有42条内部命令。该shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。 4.csh
姓名___________联系方式__________ 中科院测试班linux-基础试卷 一、选择题 1.一个bashshell脚本的第一行是什么() A#!/bin/bashB.#/bin/bashC.#/bin/cshD./bin/bash 2.下面哪个命令是用来定义shell的环境变量() A、exportfsB.aliasC.exportsD.export 3.哪个命令可以将普通用户转换成超级用户() A.super B.passwd C.tar D.su 4.在vi编辑器里,命令"dd"用来删除当前的() A.行 B.变量 C.字 D.字符 5.在一行内运行多个命令需要用什么字符隔开() A.@ B.$ C.; D.* 6.按下()键能终止当前运行的命令 A.Ctrl-C B.Ctrl-F C.Ctrl-B D.Ctrl-D 7.显示用户的主目录的命令是什么?() A.echo$HOME B.echo$USERDIR C.echo$ENV D.echo$ECHO 12.在vi编辑器里,哪个命令能将光标移到第200行() A.g200 B.G200 C.:200 D.200g 8.以下哪个命令可以终止一个用户的所有进程() A.skillall B.skill C.kill D.killall 9vi中哪条命令是不保存强制退出() A.:wq B.:wq! C.:q! D.:quit 10.vi中复制整行的命令是() A.y1 B.yy C.ss D.dd 11.以下对于shell用户变量的定义,不对的是() A.g_Linux= B.LINUX=2.6.30 C 12.在终端里执行echo“currentpath:“‘`pwd`’“”结果是:() A.currentpath:/home/Linux B.current path:’/home/Linux’ C.currentpath:’`pwd`’ D.currentpath:`pwd` 二、填空题 1.对于目录间的切换,跳转到上一级目录使用(),切换到当前用户的家 目录() 2.需要删除目录xx_linux下的所有文件及目录,并无需提示逐一删除, 执行命令为() 3.终端里执行a=100;b=20;echo&[$a+$b];echo$a+$b;结果分别是() () 4.导出历史记录的最近20条记录到cmd.txt文本:() 5、vim进入text.c文件里。在插入模式下,想查找单词word,怎么进行 操作()。
☆掌握Shell的基本语法结构。 ☆学会编写并执行Shell脚本程序。 ☆学会在Linux下进行进程调度和作业调度 任务一学习变量与表达式 Shell是操作系统最外面的一层,负责管理用户与操作系统之间的交互,例如等待用户输入,向操作系统解释用户的输入,以及处理操作系统的各种输出结果。 除了作为命令解释器之外,Shell本身还是一个解释型的程序设计语言。Shell程序设计语言支持变量、表达式、函数和流程控制结构等,任何在终端能够执行的命令也放到Shell程序。 ● 4.1.1 变量 ●在Shell中有三种变量:系统变量、环境变量和用户变量。其中系统变量在对参数判 断和命令返回值判断会使用,环境变量主要是在程序运行的时候需要设置,用户变量在编程过程中使用最多。 ●这几种变量的赋值方法各不相同,主要有:直接设置变量值、变量之间的置换、从 命令行参数获取、从环境变量获取和用户输入等几种方式。 ●引用变量一般采用“$variable”的形式引用变量variable的值。 1.系统变量 ●Shell常用的系统变量用于提供系统信息。系统变量一般采用命令行参数获取。 2.环境变量 ●Shell在开始执行前就已经定义了一些与系统工作环境有关的变量。 ●显示环境变量用echo命令。 ●在bash中,设置环境变量用set命令。用unset命令可将环境变量重新设置为系统 默认值,。 ●用户并不需要每次登录后都对各种环境变量进行手工设置,通过环境设置文件,用 户的工作环境的设置可以在登录的时候由系统自动来完成。环境设置文件有两种:系统环境设置文件和用户环境设置文件。 ●
3.用户变量 ●不管系统变量和环境变量有多少,对于需求来说,总是不够的。用户常常需要自定 义一些变量,这些变量就称为用户变量。 ●定义用户变量的语法为: ●name=string ●局部变量与全局变量 Shell变量也有其规定的作用范围。局部变量的作用范围仅仅在其命令行所在的Shell 或Shell脚本文件中。全局变量的作用范围则包括本Shell进程及其所有子进程,即相当于环境变量,贯穿于整个当前用户环境。可以使用export命令将局部变量设置为全局变量。 export name=string ●【操作实例4.1】 用文本编辑器gedit编写一个Shell脚本test1.sh,显示执行脚本时输入的参数及参数总数目,并定义一个局部变量和一个全局变量。 4.1.2 表达式 Shell中的表达式分为算术运算表达式、关系与逻辑表达式和正则表达式等几种。 1.expr命令 ●expr命令的功能是求表达式的值。 2. 算术表达式 ●算术表达式可以是由运算符+、-、*、/、=组成的表达式。 3. 关系与逻辑表达式 ●命令test与方括号[ ]都用于进行条件测试,测试的结果返回逻辑值,即真true(0)和 假false(1)。test和[ ]可以相互替换。 ● ●
shell心得体会 篇一:Linux心得体会 《Linux操作系统》学习心得体会 姓名:杜昕 学号:XX441789 班级:计科普1004班 一、摘要 Linux操作系统这个名词记得在很早以前就听过,但当时并不知道具体是什么样的操作系统,只知道是一个与嵌入式密切相关的操作系统。因为我是学习嵌入式方向的,这学期就选修了这门专业任选课。为了更好的学习这门课程,我不仅课上认真听讲,课下也努力学习,为此还在自己的电脑上安装了Ubuntu系统。眼看这个学期的Linux课程已经告一段落了,我觉得有必要写一遍心得体会来总结一下这学期对着门课程的学习。 关键词:Linux、嵌入式、心得 二、Linux简介 Linux是一种广泛使用的类UNIX操作系统,它不仅可以在Intel,AMD等系列个人计算机上运行,也可以运行在许多工作站上。它是真正多用户、多任务操作系统,他继承了UNIX系统的主要特征,具有强大的信息处理功能,特别在Internet和Intranet应用中占有明显优势。
1991年,芬兰赫尔辛基大学的学生Linux Torvalds在Inter386个人计算机上开发了Linux核心,并利用互联网发布了源代码,从而创建了Linux操作系统。之后,许多系统软件设计专家共同对它进行改进和提高。到现在为止,Linux 已成为具有全部UNIX特征、与POSIX兼容的操作系统。 Linux的功能强大而全面,与其他操作系统相比,具有一系列显著特点: (1)与UNIX系统兼容。 (2)自由软件和源码公开。 (3)性能高和安全性强。 (4)便于定制和再开发。 (5)互操作性高。 (6)全面的多任务和真正的32位操作系统。 当今的Linux有两种版本:核心版本和发行版本。其中核心版本主要是Linux的内核。其官方版本由Linux Torvalds本人维护着。发行版本是各个公司推出的版本,他们与核心版本是各自独立发展的。常见的发行版本有以下7种: (1)Red Hat Linux/ Fedora Core (2)Debian (3)Ubuntu (4)Slackware
Shell脚本 1.Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。 Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Shell 脚本(shell script),是一种为 shell 编写的脚本程序。 2.Linux 的 Shell 种类众多,常见的有: ?Bourne Shell(/usr/bin/sh或/bin/sh) ?Bourne Again Shell(/bin/bash) ? C Shell(/usr/bin/csh) ?K Shell(/usr/bin/ksh) ?Shell for Root(/sbin/sh) 由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。 在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像#!/bin/sh,它同样也可以改为#!/bin/bash。 #!告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。 3.echo 命令用于向窗口输出文本。 Shell变量 1.定义变量时,变量名不加美元符号($,PHP语言中变量需要) 变量名和等号之间不能有空格 变量名的命名须遵循如下规则: ?命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 ?中间不能有空格,可以使用下划线(_)。 ?不能使用标点符号。
?不能使用bash里的关键字(可用help命令查看保留关键字)。 2.使用变量 使用一个定义过的变量,只要在变量名前面加美元符号即可,例如: your_name="qinjx" echo $your_name echo ${your_name} 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界;推荐给所有变量加上花括号,这是个好的编程习惯。 3.只读变量 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。 语法:readonly your_name 4.删除变量 使用 unset 命令可以删除变量。 语法:unset variable_name 变量被删除后不能再次使用。 unset 命令不能删除只读变量。 5.变量类型 运行shell时,会同时存在三种变量: ?1) 局部变量局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell 启动的程序不能访问局部变量。 ?2) 环境变量所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。 注:必要的时候shell脚本也可以定义环境变量。 ?3) shell变量 shell变量是由shell程序设置的特殊变量。 注:shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。 Shell字符串
1,环境 Linux的Shell种类众多,常见的有: Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again Shell(/bin/bash) C Shell(/usr/bin/csh) K Shell(/usr/bin/ksh) Shell for Root(/sbin/sh) 2,第一个shell 新建一个文件test.sh,扩展名为sh(sh代表shell) #!/bin/bash echo "Hello World !" "#!" 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell 3,shell的运行 1)作为可执行程序 chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本 一定要写成./test.sh,而不是test.sh,./test.sh告诉系统说,就在当前目录找 2)作为解释器参数 这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名,如: /bin/sh test.sh /bin/php test.php 这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。 4,shell变量 1)定义变量 your_name="https://www.wendangku.net/doc/f413624857.html," 变量名不加美元符号,变量名和等号之间不能有空格 变量名的命名规则: Linux Shell 基础知识大全加入文库VIP 首个字符必须为字母(a-z,A-Z)。 中间不能有空格,可以使用下划线(_)。 不能使用标点符号。 不能使用bash里的关键字(可用help命令查看保留关键字)。 2)使用变量 your_name="qinjx" echo $your_name echo ${your_name} 加花括号是为了帮助解释器识别变量的边界,推荐给所有变量加上花括号 已定义的变量,可以被重新定义 your_name="tom" echo $your_name your_name="alibaba" echo $your_name 3)只读变量 myUrl="https://www.wendangku.net/doc/f413624857.html,"
有些人仍然会有这种愚蠢的想法,他们认为使用Linux就必须使用Linux shell命令。胡说!你可以不懂得任何Linux命令,比如说ps,grep,ls等,但是你仍然可以使用很多现代的Linux桌面发行版。 Linux的系统管理员与桌面用户不一样,他们不像桌面用户一样使用Cinnamon,GNOME,Unity,或者KDE,他们所有的时间都是用Linux命令。 对于桌面用户来讲,若是了解一部分Linux命令,你可以更好的使用Linux,体验它的魅力,下面列举出了一些: Shell基础: 你可以通过打开Linux的terminal(终端)来执行Shell命令。Shell的种类有很多种,例如CSH,Bourne Shell,Korn Shell。在现在的大多数Linux发行版中,默认的Shell一般都是Bourne again shell(bash)。 想看看你的Shell是哪一种,执行下面的命令 echo $SHELL 在Linux中,$符号代表一个shell变量。所有的shell都用这种方式使用变量。有一些shell 变量在你的系统启动的时候就有了默认值。例如,$SHELL;$LOGNAME是你的登录名,而$PATH变量指明了你的shell命令的搜索范围。 echo命令的作用就是打印出你的输入。如果你的输入具有shell的特殊意义,例如shell变量,他就输出变量的值。 一个重要的地方是,你要注意文本的大小写。例如,ls,是DOS的dir命令的Linux版本。这个命令列出当前工作目录下的文件列表。如果你输入的是LS,你得到的只能是“找不到命令”的错误信息。 另外在Linux shell命令中一个重要的地方是,你可以将命令串起来。这是Unix/Linux从第一天开始就有的巧妙的特点。最简单的将命令连起来的办法就是使用“|”,我们称之为“pipe”。第一个命令的输出就是下一个命令的输入。 Linux命令有自己的语法规则: 基本的语法就像这样: command -option file 例如:
shell脚本编程学习笔记(一) 一、脚本格式 vim shell.sh #!/bin/bash//声明脚本解释器,这个‘#’号不是注释,其余是注释 #Program://程序内容说明 #History://时间和作者 二、shell变量的种类 用户自定义变量:由用户自己定义、修改和使用 与定义变量:Bash与定义的特殊变量,不能直接修改 位置变量:通过命令行给程序传递执行的参数 1、定义变量: 变量名要以英文字母或下划线开头,区分大小写。 格式:变量名=值 输出变量:echo $变量名 2、键盘输入为变量内容: 格式:read [-p "信息"] 变量名 如:read -p "pewase input your name:" name 3、不同引号对变量的作用 双引号"":可解析变量,$符号为变量前缀。 单引号'':不解析变量,$为普通字符。 反引号``:将命令执行的结果输出给变量。 三、shell条件测试 1、test命令: 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数字。 格式:test 条件表达式[ 条件表达式] (注意:[]与表达式之间存在空格) 2、常见的测试类型: 测试文件状态 格式:[ 操作符文件或目录] 如:if [ -d /etc ] then echo "exists" else echo "not exists" fi 常见的测试操作符: -d:测试是否为目录 -e:测试目录或文件是否存在 -f:测试是否为文件 -r:测试当前用户是否有读权限 -w:测试当前用户是否有写权限 -x:测试当前用户是否有执行权限
Linux-Shell编程从入门到精通学习教程打包下载==
Linux Shell编程从入门到精通学习教程打包下载 课程目标 我们可以通过本次系列的编程技术学习,掌握企业里面的运维编程必备脚本,同时掌握企业运维到底要求会什么东西,有哪些是我们必须要掌握的知识。适用人群 适合有linux基础知识,想进一步学好linux的各位同学,我也会跟大家一起努力,分享、感恩、成长! 课程简介 【Linux编程视频课程Shell从入门到精通(完整版)】 课程目标: 本套课程适用于初学者以及各类运维人员,我们可以通过本次系列的编程技术学习,掌握企业里面的运维编程必备脚本,同时掌握企业运维到底要求会什么东西,有哪些是我们必须要掌握的知识,为我们的运维能力保驾护航、增值加薪,让我们的运维更加容易,真正做到懒人运维,而不是每天苦逼的搬服务器,每天无奈的去救火! 适合对象: 适合有linux基础知识,想进一步学好linux的各位同学,我也会跟大家一起努力,分享、感恩、成长! 学习条件: 需要有耐心、对自己负责,对自己的人生负责,选择了决定未来,选择了就全力以赴去行动,相信结果值得拥有! 学习宣言:
让我们乘着Linux的大船,奔向我们未来的方向!期待以及祝愿同学们每个人都有好的收获,每天都有新的起点!人人都能学会我们的linux下Shell 编程。 课程 1 Linux下Shell编程基础入门 [免费观看] 14分钟 说到Shell编程,我想很多从事Linux运维工作的朋友都不陌生,都对Shell 有基本的了解,可能大家刚开始接触Shell的时候,有各种想法?能不能不学?高大上?到底是浮云?还是神马?很难啊?我想告诉大家的是,大家有这些想法一点都不觉得惊讶,为什么?这些都很正常,对于任何一件事情在未开始之前,肯定会有总总假设,那我今天想说的是,学完人人都会Shell 编程后,我们会觉得一切的Shell都是浮云,我们每个人都能很好的使用它,驾驭它,更好的完成我们日常运维的工作。曾经有人说过,玩Linux不知道Shell,那就是不懂Linux;现在细细品味确实是这样。为了让更多的人能接触Shell、了解Shell,使用Shell,所以今天开设了这样一个网络课程,让我们的Shell飞起来。 2 Shell编程之变量及LAMP导航菜单编写 [免费观看]
EFI和EFI Shell命令简介 EFI是Extensible Firmware Interface的缩写,是介于平台固件和操作系统之间的一层软件接口。EFI是Intel在1998年开始的一个项目演变而来,而在2005年Intel将EFI 1.10开源并交由Unified EFI开源社区去维护和开发,Intel自己的EFI 也就不单独做了,都和开源社区共用一个。现在也通常用EFI来代指UEFI,二者不再有意区分。 EFI Shell是EFI提供的一个交互式的命令行Shell环境,在这里你可以执行一些efi应用程序,加载efi设备驱动程序,以及引导操作系统,从引导菜单项中选择”efi shell”,回车,待出现”shell]”提示符时即表明你已进入efi shell环境中,下面对一些常用的efi shell环境下的命令作些简要介绍: 1、fsn: 改变当前驱动器。例如:fs0当前映射到了ls-240 驱动器的话, fs0: [回车]就将提供对ls-240 驱动器的访如:fs0: 2、attrib [-b] [+/- rhs] [file] 察看或设置文件属性 3、break 设置执行断点 4、cd [path] 改变当前目录 5、cls [background color] 清屏 6、comp file1 file2 进行文件比较 7、cp [-r] file [file] ... [dest] 拷贝文件和目录 8、date [mm/dd/yyyy] 获取或设置日期 9、devices [-b] [-1xxx] 列出系统中的所有设备 10、devtree [-b] [-d] 显示设备树 11、echo [[-on | -off] | [text] 回显 12、edit [filename] 文本编辑 13、eficompress infile outfile 压缩efi文件 14、efidecompress infile outfile 解压efi文件 15、help [-b] [internal_command] 显示帮助信息 16、load driver_name 加载驱动 17、ls [-b] [dir] [dir] ... 获得目录列表 18、mkdir dir [dir] 创建目录项 19、mount blkdevice [sname[:]] 在一个块设备上加载文件系统 20、mv [src…] [dst] 移动文件或目录 21、reset [reset_string] 冷启动 22、rm file/dir [file/dir] 删除文件或目录 23、time [hh:mm:ss] 获取或设置时间 24、type [-a] [-u] [-b] file 察看文件内容 25、ver 显示版本信息 26、vol fs [volume_label] 设置卷标
一、bash 配置文件 在您的home 目录下,运行 ls .bash* 您将看到这些文件: l .bash_history :记录了您以前输入的命令, l .bash_logout :当您退出shell 时,要执行的命令, l .bash_profile :当您登入shell 时,要执行的命令, l .bashrc :每次打开新的shell 时,要执行的命令。 请注意后两个的区别:'.bash_profile'只在会话开始时被读取一次,而'.bashrc'则每次打开新的终端(如新的xterm 窗口)时,都要被读取。按照传统,您得将定义的变量,如PATH ,放到'.bash_profile'中,而象aliases(别名)和函数之类,则放在'.bashrc'。但由于'.bash_profile'经常被设置成先读取'.bashrc'的内容,您如果图省事的话,就把所有配置都放进'.bashrc'。这些文件是每一位用户的设置。系统级的设置存储在'/etc/profile'、'/etc/bashrc'及目录 '/etc/profile.d'下的文件中。但您得习惯用各自的配置文件:编辑不需要'root'权限,还可以使您的设置更有个性。当系统级与用户级的设置发生冲突时,将采用用户的设置。 读取'.bashrc'的内容,您如果要省点事的话,就把您所有的配置都放进'.bashrc'。 上面的这些文件是每位用户的设置,系统级的设置存储在'/etc/profile'、'/etc/bashrc'及目录'/etc/profile.d'下的文件中。您最好习惯使用各自的配置文件:编辑不需要'root'权限,还可以使您的设置更具个性。当系统级与用户级的设置发生冲突时,将优先采用用户的设置。二、提示符 每次当您打开一个控制台(console)或xterm 时,最先看到的就是提示符(prompt),类似于: account@hostname ~$ 在默认设置下,提示符将显示您的用户名、主机名(默认是'localhost')、当前所在目录(在Unix 中,'~'表示您的home 目录)。 按照传统,最后一个字符可以标识您是普通用户($),还是'root'(#)。 您可以通过$PS1 变量来设置提示符。命令 echo $PS1 将显示当前的设定。其中可用字符的含义在manbash 的'PROMPTING'部分有说明。 如何才能完成理想的设置呢?对于健忘的初学者来讲,默认设定有些不友好,因为提示符只显示当前目录的最后一部分。如果您看到象这样的提示符 tom@localhost bin$ 您的当前目录可能是'/bin'、'/usr/bin'、'/usr/local/bin'及'/usr/X11R6/bin'。当然,您可以用pwd (输出当前目录,printworking directory) 能不能叫shell 自动告诉您当前目录呢? 当然可以。这里我将提到的设定,包括提示符,大都包含在文件'/etc/bashrc'中。您可以通过编辑各自home 目录下的'.bash_profile'和'.bashrc'来改变设置。
为什么要进行shell编程 Linux系统中虽然有各种各样的图形界面工具,但shell仍然是一个非常灵活的工具。Shell不仅集合了大量命令,还是一门非常棒的编程语言。借助shell,大量任务能实现自动化;shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。 下面,让我们一起来看看shell是如何工作的: 建立一个脚本 Linux中有许多种不同的shell,通常我们使用bash (bourne again shell) 进行shell编程因为bash不仅免费(自由)且易于使用。本文提供的脚本都用bash(当然大多数情况下,这些脚本同样可以在bash的前辈, bourne shell中运行)执行。 如同其他语言一样,我们可以使用任意一种文字编辑器,比如nedit、kedit、emacs、vi 等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行): 代码: #!/bin/bash 符号#!用来告诉系统执行该脚本的程序,本例使用/bin/sh。编辑完了,如果要执行该脚本,还必须使其可执行: 代码: chmod +x filename 这样输入 ./filename 便可执行该脚本。 注释 shell脚本中以# 开始的行表示注释,直到一行的结束。我们真诚的建议你在脚本中使用注释,这样即便在相当长时间内没有使用该脚本,你也能在短时间内明白该脚本的作用和工作原理;此外还有很重要的原因——有了注释,更利于和别人分享你的脚本。 变量 在其它编程语言中,你必须使用变量。shell编程中,所有变量都由字符串组成,并且不需要声明。要给一个变量赋值,你可以这么写: 代码: 变量名=值
1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须放在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 当编辑好脚本时,如果要执行该脚本,还必须使其可执行。要使脚本可执行: chmod +x filename 这样才能用./filename 来运行 1.1.2 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。 1.1.3 变量 在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写: #!/bin/sh #对变量赋值: a="hello world" # 现在打印变量a的内容: echo "A is:" echo $a 有时候变量名很容易与其他文字混淆,比如: num=2 echo "this is the $numnd" 这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量: num=2 echo "this is the ${num}nd"
这将打印: this is the 2nd 1.1.4 环境变量 由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。 1.1.5 Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: s虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。 常用命令语法及功能: echo "some text": 将文字内容打印在屏幕上 ls: 文件列表 wc –l filewc -w filewc -c file: 计算文件行数计算文件中的单词数计算文件中的字符数 cp sourcefile destfile: 文件拷贝 mv oldname newname : 重命名文件或移动文件 rm file: 删除文件 grep 'pattern' file: 在文件内搜索字符串比如:grep 'searchstring' file.txt cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令 cat file.txt: 输出文件内容到标准输出设备(屏幕)上 file somefile: 得到文件类型 read var: 提示用户输入,并将输入赋值给变量 sort file.txt: 对file.txt文件中的行进行排序 uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3 find: 搜索文件比如:根据文件名搜索find . -name filename -print tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux