自己总结的shell脚本学习笔记(未完待续)
- 格式:pdf
- 大小:4.80 MB
- 文档页数:24
Shell编程总结Shell编程也被称为命令行编程,它是一种在操作系统的Shell环境中编写脚本来控制和自动化任务的方式。
Shell编程是Linux系统中非常重要的一部分,可以实现系统管理、文件处理、任务调度等各种功能。
下面是关于Shell编程的一些总结:一、Shell脚本的基本结构和语法1. Shell脚本的扩展名通常为.sh,脚本文件第一行需要指定解释器,例如#!/bin/bash指定使用bash解释器。
2. 变量的定义需要在变量名前加上$符号,如$var。
3. 变量的赋值可以使用=号,例如var=10。
4.标准输入、输出和错误输出分别是0、1和25.注释以#号开头,可以用于解释程序的逻辑和功能。
6.命令的执行可以使用`命令`这种方式,也可以使用$(命令)这种方式。
二、Shell编程的控制结构1. if-then-else结构:根据条件判断执行不同的分支。
2. for循环结构:对一个列表或序列进行迭代处理。
3. while循环结构:在一些条件为真时重复执行一段代码。
4. until循环结构:在一些条件为假时重复执行一段代码。
5. case结构:根据不同条件选择不同的分支执行。
三、Shell脚本的常用操作1.输入输出重定向:可以将命令的输出重定向到文件中或从文件中读取输入。
2.管道操作符:可以将多个命令连接起来,将一个命令的输出作为另一个命令的输入。
3.变量操作:可以对字符串进行拼接、截取等操作。
4.数组操作:可以创建和操作数组。
5.函数定义和调用:可以将一段代码封装成函数,并在需要的时候调用。
四、Shell脚本的常用命令1.文件和目录操作:包括创建、删除、移动、重命名等操作。
2.文件内容处理:包括查找、替换、排序等操作。
3.系统管理:包括用户管理、进程管理、系统信息查询等操作。
4.执行外部命令:可以执行其他编程语言的程序或者系统命令。
五、Shell脚本的调试和错误处理1. 使用set -e命令可以在脚本遇到错误时立即退出。
shell编程笔记Shell编程是一种在Unix/Linux系统中常用的脚本编程语言,它通过命令行解释器(如Bash、Zsh等)执行一系列命令和控制流程,以实现自动化任务和脚本编写。
Shell编程的基本语法包括变量、条件语句、循环语句、函数等。
1. 变量,在Shell脚本中,可以使用变量来存储数据。
变量的命名规则是以字母或下划线开头,后面可以是字母、数字或下划线。
变量赋值使用等号,如`name="John"`。
使用变量时需要在变量名前加上美元符号,如`echo $name`。
2. 条件语句:Shell中常用的条件语句有if语句和case语句。
if语句用于根据条件执行不同的代码块,语法如下:if [ condition ]; then.# code block.elif [ condition ]; then.# code block.else.# code block.fi.case语句用于根据不同的值执行不同的代码块,语法如下: case "$variable" in.pattern1)。
# code block.;;pattern2)。
# code block.;;)。
# code block.;;esac.3. 循环语句:Shell中常用的循环语句有for循环和while循环。
for循环用于遍历一个列表或范围,语法如下:for variable in list; do.# code block.done.while循环用于在条件满足时执行代码块,语法如下:while [ condition ]; do.# code block.done.4. 函数:Shell中可以定义函数来封装一段可重复使用的代码。
函数的定义以`function`关键字开始,语法如下:function_name() {。
# code block.}。
在函数中,可以使用`return`语句返回一个值。
Linux效劳器Shell编程学习笔记linux操作系统电脑资料Shell是系统的用户界面,提供了用户与内核进展交互操作的一种接口,Shell脚本编程学习入门是本文要介绍的内容,我们可以使用任意一种文字器,比方gedit、kedit、emacs、vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行):#!/bin/sh...注意:最好使用“!/bin/bash”而不是“!/bin/sh”,如果使用tc shell改为tcsh,其他类似。
符号#!用来告诉系统执行该sell脚本的程序,本例使用/bin/sh。
完毕并保存后,如果要执行该shell脚本,必须先使其可执行:chmod +x filename此后在该shell脚本所在目录下,输入 ./filename 即可执行该shell脚本。
Shell里的一些特殊符号a []shell离得函数如果你写过比较复杂的shell脚本,就会发现可能在几个地方使用了相同的代码,这时如果用上函数,会方便很多。
函数的大致样子如下:{# inside the body $1 is the first argument given to the function# $2 the second ...body}你需要在每个脚本的开始对函数进展声明。
下面是一个名为xtitlebar的shell脚本,它可以改变终端窗口的名称。
这里使用了一个名为help的函数,该函数在shell脚本中使用了两次:#!/bin/sh# vim: set sw=4 ts=4 et:help(){cat << HELPxtitlebar -- change the name of an xterm, gnome-terminal or kde konsoleUSAGE: xtitlebar [-h] "stringfortitelbar"OPTIONS: -h help textEXAMPLE: xtitlebar "cvs"HELPexit 0}# in case of error or if -h is given we call the function help:[ -z "$1" ] && help[ "$1" = "-h" ] && help# send the escape sequence to change the xterm titelbar: echo -e "33]0;$107"#在shell脚本中提供帮助是一种很好的编程习惯,可以方便其他用户(和自己)使用和理解脚本。
最全面实用的LINUXSHELL脚本编程知识点总结Linux Shell脚本编程是非常重要的技能,在Linux系统中可以通过编写脚本自动执行一系列任务,提高工作效率。
下面是一个最全面实用的Linux Shell脚本编程知识点总结:1. Shell脚本的基础知识:- Shell是一种解释型语言,常见的Shell有bash、sh等。
- Shell脚本以文件的形式存在,并用.sh或者.bash扩展名。
2.变量:-变量可以用来存储数据,可以通过赋值操作来给变量赋值。
-变量的命名规则:以字母或下划线开头,只能由字母、数字和下划线组成。
-可以使用$符号来引用变量的值。
3.输入和输出:- 使用read命令可以从用户那里接收输入。
- 使用echo命令可以将内容输出到终端上。
4.条件判断:- 使用if语句进行条件判断,语法为:if [ 条件 ]; then 执行语句; fi。
- 可以使用test命令进行条件判断。
5.循环:- 使用for循环进行重复操作,语法为:for 变量 in 列表; do 执行语句; done。
- 使用while循环进行重复操作,语法为:while 条件; do 执行语句; done。
6.函数:-函数是一段可以重复调用的代码,可以接收参数和返回值。
- 函数的定义:function 函数名( { 执行语句; }。
-函数的调用:函数名参数。
7.字符串处理:-可以使用变量和字符串拼接来创建新的字符串。
- 可以使用expr命令进行字符串的截取、查找等操作。
- 可以使用sed命令进行字符串的替换操作。
8.数组:-数组是一种特殊的数据结构,可以存储一系列的元素。
- 数组的定义:array=(元素1 元素2 元素3)。
- 数组的访问:${array[索引]}。
9.文件操作:- 可以使用touch命令创建新文件。
- 可以使用rm命令删除文件。
- 可以使用cp命令复制文件。
10.进程管理:- 可以使用ps命令查看当前系统中运行的进程。
Shell笔记1shell脚本1.1 结构#!/bin/bash…Exit(0)✓注:shell中大小写敏感1.2 调试Sh [-nvx] scripts.sh-n 不执行只检查语法-x 执行时将脚本命令打印到屏幕1.3 帮助✓man command✓查看是否bash内部命令:type 命令(区别于Alias定义的命令别名)2常量、变量2.1 常量无,但有只读变量(值不可改变,可保证关键值不被覆盖,不仅可以标识变量,还可以标识数组,定义declare -r)2.2 变量2.2.1分类:✓本地变量:存在于当前进程$i✓环境变量:用于所有进程。
系统环境变量:Eg:$RANDOM 返回一个(0-32767)间的随机数✓位置变量:作为程序参数,允许10个$0(脚本名),$1(第一个参数)..$9 ✓特殊变量:$?最后一条命令退出的状态,0-正常,其他值-出错代码2.2.2定义\取消定义\赋值✓本地变量:直接定义。
取消定义:unset赋值=变量+字符串:””$path”:/home”或”$path:/home”✓环境变量:定义:Export 或declare –x其他同本地变量2.2.3数据类型✓定义变量时不需要定义数据类型✓使用declare可以声明变量类型–a 数组,-r 只读,-i整形2.2.4显示✓echo ${变量或表达式}:{}中间可以加表达式✓echo $变量2.3 字符串2.3.1定义:a=”123456”2.3.2常用命令字符串%x=" abcdabcd "✓字符串长度:expr "$x" : '.*'✓是否包含字串:%expr index $x "a" 1✓拼接:$x$y✓截取:%expr substr "$x" 1 3 “abc”✓字符串替换trtr [–ds] set1 set2-d取代set1中字符.-s把连续重复的字符以单独一个字符表示eg:删除文章中换行tr –d “\n\t” filename;eg: last|tr …[a-z]‟…[A-Z]‟✓Tab键转空格键(在windows文件转linux下执行时有用)expand命令2.4 数组:2.4.1定义、赋值:array[1]=”big”2.5 命令✓显示所有变量set 命令✓显示所有环境变量env3特殊符号3.1 引号✓双引:在双引中三个符号不能原样显示(即:“”可以处理变量值、转移、执行系统命令):$(变量)\(转义)`(执行系统命令)✓单引:所有符号原样显示✓反引号:执行系统命令`3.2 其他符号✓转义:\有特殊含义的符号包括(即需要转义的符号):&* + ^ $ ` “ | ?eg:echo * 列出所有文件echo \* 列出*✓#注释✓;连续命令分隔✓~根目录✓&命令变后台工作(例如:并发性能测试用到,且关闭当前登录服务器进程,后台进程仍然工作)Eg: 并发测试脚本:Times=并发次数for ((i=1;i<=$times;i=i+1))do$path/KeywordExtract –c/home/chenqin/test_keyword/keyword_local/conf/keyword_extract.conf -d/home/guier/testdata/gjccq/bingfaxingneng/"dir$i"/ >/home/guier/testresult/"bingfaxingneng$i.txt"&done3.3 通配符:✓*:包含空串eg:rm report * 先删report,再删所有文件✓? 不可以匹配.打头的字串。
Linux是众所周知的一种极其稳定的操作系统,适用于各种不同电子设备,比如你的Android手机。
也有很多发布版本适用于你的pc。
进入正题,在linux下打命令行和在windows下面的cmd是一样一样的,只不过linux下的指令与windows 完全不同,需要使用的时候请自行百度自己要用的指令,楼主只负责介绍一下shell脚本的写法,让你可以一劳永逸不用总是敲命令。
好的,让楼主来介绍一下shell脚本的原理。
Linux下敲命令行的那个,接受你的命令行的玩意就叫做shell,它就是一个读取各种指令并以一定已经编好的方式给计算机运行的程序,也就是说,这是一个人机对话的窗口。
你可以写一个所谓的叫脚本的东西,这个脚本就是事先写好一堆指令放在一个文件里面,然后让系统读这个文件并且执行里面写着的指令。
那么,请问系统怎么知道你写的这堆指令的含义呢?比如楼主写一个shutdown这个指令给系统,系统如何知道我写的这个shutdown是什么意思呢?那就需要告诉系统,请用哪种语言读我的这个指令。
所以写shell脚本的第一步是告诉系统,你的指令的这个含义所在的位置,让系统去找到那个位置,并且以此认识你的指令。
因此一个shell脚本的第一句这样写:#!/bin/bash这句话的意思是,请到/bin/bash去寻找指令的含义。
然后,请尽情地写你要的指令,系统就会帮你一条一条执行下去,比如一个简单的脚本这样写:#!/bin/bashmkdir hellocd hellomkdir worldcd..rm –r hello第一行的意思大家都明白了,第二行的意思和直接在shell下面敲指令的意思是一样的,就是在当前目录创建一个叫做hello的目录,第三行的意思是进入hello这个目录,第四行的意思是创建一个叫做world的目录,第五行的意思是回到上一级目录,最后一行的意思是把hello目录及其以下的所有子目录全部删掉。
(楼主你是二逼么创建了马上删)楼主给这个例子的意思无非就是告诉大家,在告诉系统去哪里读指令的含义之后的操作,和在shell下面直接敲指令是一样的了。
linuxshell编程实验总结Linux Shell编程实验总结在Linux系统中,Shell编程是一种强大的工具,可以帮助用户进行自动化任务、脚本编写和系统管理。
通过学习和实践Shell编程,我深深地体会到了其在提高工作效率和简化任务流程方面的重要性。
在这篇文章中,我将总结我在Linux Shell编程实验中的经验和心得。
一、实验概述在这次Linux Shell编程实验中,我学习并应用了Shell脚本语言,掌握了基本的语法和命令,并通过实验来加深对Shell编程的理解和掌握。
实验的内容包括变量的定义和使用、条件语句的实现、循环结构的应用等。
二、变量的定义和使用在Shell编程中,变量的定义和使用是非常重要的一部分。
通过实验,我学会了如何使用“=”符号来给变量赋值,并可以在后续的命令中使用这个变量。
在实践中,我发现给变量加上$符号可以获取变量的值,并且可以在字符串中插入变量。
这在编写脚本时非常有用,可以将一些可变的部分定义为变量,提高程序的可读性和可维护性。
三、条件语句的实现条件语句在Shell编程中起到了重要的作用,可以根据不同的条件执行不同的命令。
通过实验,我掌握了Shell中常用的条件判断语句,如if语句和case语句。
在编写条件语句时,我注意到要使用适当的比较运算符(如“-eq”表示等于、“-ne”表示不等于等),并在语句块的结尾加上“fi”或“esac”来结束条件语句的定义。
四、循环结构的应用在实践中,我发现循环结构是Shell编程中非常重要的一部分,可以重复执行特定的任务。
通过实验,我掌握了两种常见的循环结构:for循环和while循环。
在编写循环结构时,我注意到要使用适当的循环控制语句,如“break”可以用于跳出循环,“continue”可以用于跳过当前循环中的剩余命令,继续下一次循环。
五、实验心得通过这次实验,我深刻认识到了Shell编程在自动化任务和脚本编写方面的重要性。
Shell编程既可以简化日常工作中的重复性任务,又可以提高工作效率和减少出错的可能性。
Linux Shell 编程实验总结1.引言本文档总结了在学习Li nu xS he ll编程过程中的实验经验和心得体会。
通过对L in ux Sh el l编程实验的实施和总结,我们能够更好地理解S h el l脚本的运行机制,掌握Sh el l脚本的基本语法和常用命令,提高编写高效、精确的Sh e ll脚本的能力。
2.实验一:S hell 脚本基础2.1实验目的本实验旨在帮助学员熟悉Sh el l脚本的基本语法和常用命令,掌握脚本的编写与执行方法。
2.2实验内容在本实验中,我们学习了如何编写具有特定功能的Sh el l脚本,如输出H el lo Wo rl d、计算两个数之和、判断文件是否存在等。
2.3实验心得通过本实验的实施,我对Sh el l脚本的基本语法有了更深入的理解。
在编写脚本的过程中,我发现使用变量、条件判断和循环结构可以极大地提高脚本的灵活性和实用性。
同时,我也加深了对常用命令的认识和掌握,如e ch o、re ad、i f-e ls e、fo r循环等。
这些基本的知识将为后续的实验和项目实践打下坚实的基础。
3.实验二:文件和目录操作3.1实验目的本实验旨在帮助学员了解Li nu x文件系统的基本操作,掌握S he ll脚本中与文件和目录相关的命令。
3.2实验内容在本实验中,我们学习了如何创建、复制、重命名和删除文件、目录,以及如何查询文件和目录的属性信息等。
3.3实验心得通过本实验的实施,我对Li nu x文件系统有了更深入的了解。
我学会了如何使用S he ll脚本快速处理文件和目录,并且能够根据需求编写相应的脚本来操作文件。
例如,通过使用fi n d命令来查找文件,使用g r ep命令来搜索文件内容等。
这些技能在日常工作中非常有用,能够提高工作效率和准确性。
4.实验三:文本处理4.1实验目的本实验旨在帮助学员掌握Sh el l脚本中处理文本的常用命令和技巧,能够快速有效地处理常见的文本数据。
linux shell编程总结Linux Shell编程是一种用于自动化任务和脚本编写的工具。
通过使用Shell脚本,我们可以执行一系列命令,并实现自动化处理、任务简化和系统管理。
下面是对Linux Shell编程的总结:1. Shell脚本的基本结构:Shell脚本以#!/bin/sh开头,#!/bin/bash是指定使用Bash Shell解释该脚本。
然后,我们可以编写一系列命令,每个命令一行,并以执行权限运行脚本。
2. 变量:在Shell脚本中,我们可以定义变量并将其用于存储数据。
变量可以是字符串、数字或数组。
使用等号(=)来赋值给变量,例如:name="John"。
变量用$符号进行引用,例如:echo $name。
3. 条件语句:在Shell脚本中,我们可以使用条件语句来实现流程控制。
例如,使用if-else语句可以根据条件执行不同的命令块。
4. 循环语句:使用循环语句可以使Shell脚本重复执行一系列命令。
常见的循环语句有for和while。
for循环用于迭代一个列表或范围,而while循环则在条件为真时执行。
5. 函数:函数是一种将一系列命令组织在一起,并可以多次调用的方式。
在Shell脚本中定义函数后,可以在脚本中的任何位置调用该函数并传递参数。
6. 输入和输出重定向:通过使用输入和输出重定向,我们可以控制Shell脚本的输入和输出。
例如,使用>运算符可以将命令的输出重定向到文件中,而使用<运算符可以将文件作为命令的输入。
7. 错误处理:在Shell脚本中,我们可以使用条件语句和特殊变量来处理错误。
例如,通过检查特殊变量$?的值,我们可以判断前一个命令是否执行成功,并根据结果采取适当的措施。
这些是Linux Shell编程的一些基本概念和技巧的总结。
通过掌握这些知识,我们可以编写强大且高效的Shell脚本,来自动化重复性任务、简化工作流程和管理系统。
shell总结1.shell的⼼得 学习shell的时候必须把重点放在流程控制上和shell⼯具上。
⼀定要⽤⼼记语法和命令。
2.介绍shell shell是⼀种解释型语⾔,程序不需要编译,程序在运⾏时由解释器翻译成机器语⾔,每执⾏⼀次都要翻译⼀次。
因此解释型语⾔效率低。
其实也是⼀种编译型语⾔。
程序在运⾏之前就被编译器编译过成机器语⾔,执⾏的时候执⾏编译过的结果就⾏了效率⾼。
shell的编译器是bash。
3.总结shell 3.1Linux提供的解析器有 [jinghang@hadoop101 ~]$ cat /etc/shells /bin/sh 是bash的⼀个快捷⽅式 /bin/bash bash是⼤多数Linux默认的shell,包含的功能⼏乎可以涵盖shell所有的功能 /sbin/nologin 表⽰⾮交互,不能登录操作系统 /bin/dash ⼩巧,⾼效,功能相⽐少⼀些 /bin/tcsh 具有C语⾔风格的⼀种shell,具有许多特性,但是也有⼀些缺陷 /bin/csh 是csh的增强版本,完全兼容csh 3.2变量 系统变量分为:$HOME、$PWD、$SHELL、$USER等 ⾃定义变量就是⾃⼰取名字。
特殊变量:$n $0该脚本名称,$1-$9第⼀到第九个参数⼗个以上需要⼤括号${10} 特殊变量:$# 获取参数的个数 特殊变量:$*、$@ $*:这个变量代表命令⾏中所有的参数,$*把所有的参数看成⼀个整体. $@:这个变量也代表命令⾏中所有的参数,不过$@把每个参数区分对待 特殊变量:$? $?:最后⼀次执⾏的命令的返回状态。
如果这个变量的值为0,证明上⼀个命令正确执⾏;如果这个变量的值为⾮0(具体是哪个数,由命令⾃⼰来决定),则证明上⼀个命令执⾏不正确了。
3.3运算符 “$((运算式))”或“$[运算式]” + , - , *, /, % 加,减,乘,除,取余 expr + , - , \*, /, % 加,减,乘,除,取余 3.4条件判断 = 字符串⽐较 -lt ⼩于(less than) -le ⼩于等于(less equal) -eq 等于(equal) -gt ⼤于(greater than) -ge ⼤于等于(greater equal) -ne 不等于(Not equal) 3.5流程控制 if[ 条件判断式 ]; then 程序 fi 或者 if[ 条件判断式 ]then 程序 elif[ 条件判断式 ]then 程序 else 程序 fi case $变量名 in "值1")如果变量的值等于值1,则执⾏程序1 ;;"值2")如果变量的值等于值2,则执⾏程序2 ;;…省略其他分⽀… *)如果变量的值都不是以上的值,则执⾏此程序 ;;esac for (( 初始值;循环控制条件;变量变化 )) do 程序 done while [ 条件判断式 ] do 程序 done 4.shell⼯具命令 4.1 cut cut的⼯作就是“剪”,具体的说就是在⽂件中负责剪切数据⽤的。
shell编程实验总结Shell编程实验总结Shell编程是一种在Linux系统中常用的脚本语言,它可以通过编写一些简单的脚本来完成一些复杂的任务。
在学习Shell编程的过程中,我通过实验掌握了一些基本的语法和技巧,现在将它们按照类别进行总结。
一、变量在Shell编程中,变量是非常重要的概念。
我们可以通过定义变量来存储一些数据,然后在程序中使用这些数据。
定义变量的语法如下:```variable_name=value```其中,`variable_name`是变量名,`value`是变量的值。
在使用变量时,需要在变量名前加上`$`符号。
例如:```name="Tom"echo "My name is $name"```这段代码会输出"My name is Tom"。
二、条件语句条件语句是Shell编程中常用的语句之一。
它可以根据条件的真假来执行不同的代码块。
条件语句的语法如下:```if conditionthencommand1command2...elsecommand3command4...fi```其中,`condition`是一个条件表达式,如果它的值为真,则执行`then`后面的代码块;否则执行`else`后面的代码块。
例如:```if [ $name = "Tom" ]thenecho "Hello, Tom!"elseecho "Who are you?"fi```这段代码会根据变量`name`的值输出不同的问候语。
三、循环语句循环语句是Shell编程中另一个常用的语句。
它可以重复执行一段代码块,直到满足某个条件为止。
Shell编程中有两种循环语句:`for`循环和`while`循环。
`for`循环的语法如下:```for variable in listdocommand1command2...done```其中,`variable`是一个变量名,`list`是一个列表,`command1`、`command2`等是要执行的命令。
Shell学习笔记9月19日Shell是一种具备特殊功能的程序,提供了用户与内核进行交互操作的一种接口三种登录Shell的方法X WindowSSH Secure ShellPuttyShell脚本编程的优势语法和结构通常比较简单学习和使用通常比较简单通常以容易修改程序的“解释”作为运行方式,而不需要“编译”程序的开发产能优于运行效能whologged.sh脚本:#!/bin/bashcd #切换到用户根目录,因为.bash_profile在根目录下. .bash_profile #配置用户的命令行环境date #显示日期命令who #显示当前的登录用户第1行是“#!/bin/bash”,“#!”符号称为“Sha-bang”符号,是Shell脚本的起始符号,“#!”符号是指定一个文件类型的特殊标记,它告诉Linux系统这个文件的执行需要指定一个解释器(#!如同C中的#include)命令(command)是Shell脚本的最基本元素,命令通常由命令名称、选项和参数三部分组成,三部分之间用空格键或Tab键分隔命令名称在命令中是不可或缺的,而选项和参数则可以不出现。
选项的开头符号是一个减号(-),后面跟一个或多个字母,选项是对命令的补充说明分号(;)可以用来隔开同一行内的多条命令,Shell会依次执行用分号隔开的多条命令用户管理常用命令(1)用户的角色是通过UID来识别的,用户的UID是全局唯一的root 用户root 用户(也称为超级用户):系统唯一,是真实的,可以登录系统,可以操作系统任何文件和命令,拥有最高权限虚拟用户虚拟用户:这类用户也被称之为伪用户或假用户,与真实用户区分开来,这类用户不具有登录系统的能力,但却是系统运行不可缺少的用户,比如bin、daemon、adm、ftp、mail等;这类用户是系统自身拥有的,而非后来添加的,当然我们也可以添加虚拟用户普通真实用户普通真实用户:这类用户能登录系统,但只能操作其根目录的内容,权限受到限制,这类用户都是系统管理员自行添加的用户账号添加命令useradd 或adduseruseradd [option] [username]其中[option]为useradd命令选项,而[username]是要创建的用户名。
写作初衷在我当学生的时候,每当想学习一门新技术时,喜欢找一本厚厚的有关该知识的书籍,并且从头到尾认真看一遍,之后觉得应用该知识时不会有什么问题了。
当我迈出象牙塔,走进职场时发现,曾经的那本厚书所讲的东西,只有一部分在工作中得到实际的使用;公司一位资深的老员工也曾经跟我说过:公司不是要你掌握全部知识,而是其中能实际创造价值的知识。
鉴于此,我想写一些工作中某一知识实际使用的部分,与从事IT朋友们分享。
本人计算机硕士学历,现供职国内某一著名通信领域公司,从事计算机编程等日常工作。
此篇文档和后续我将要写的文档是一个系列,分别记录我工作中使用到的计算机技能,与各位计算机专业的学生、即将从事IT职业的朋友或者已是资深IT工作者分享,以此抛砖引玉,欢迎朋友们对我文中不足之处提出宝贵的意见和指导。
chmod与文件权限此篇文档将讲解关于linux中文件权限常用命令chmod。
为了达到一个比较好的效果,我会在需要的地方实际上机验证测试,并截图给朋友们看。
我的linux机器装的是(opensuse-11.3),并且以文本界面(类似于dos那种黑黑的界面)。
开始:chmod命令是一个在工作中经常被使用的命令,它主要是用来指定一个文件可以被谁读(或者不可以被谁读),可以被谁写(或者不可以被谁写),可以被谁执行(或者不可以被谁执行)。
比如,我写完一个脚本后,常常需要使用chmod的x选项为该脚本赋予权限(单单使用x选项,表示任何人都可以执行我的脚本);再比如,我写的脚本需要别人也能执行,因此我需要将我的脚本对others用户(也就是其他用户)可执行。
以上是对chmod命令的一个大体的介绍。
下面对它展开较为详细的描述。
我在我的linux机器使用touch命令(此命令时工作中常用的一个命令,后续系列文档会讲到)创建新文件script,使用l(工作经常用到的命令,还有ls,后续系列文档将会讲到)如图一所示:图一创建script可以看到,刚刚创建的script脚本那一行最前面是”-rw-r—r--”,数一下一共是10列。
shell脚本学习与总结1.shell 脚本是区分小写的2.Unix特殊字符有:( ; $ ? & * () [] ` ‘ “ +使用其时要进行转义()3.Shell的注释以#开头4.函数的定义Function fuction_name(){Command to execute}调用时直接用function_name.5.控制结构1)If...then语句If [ test_command ]ThenCommandsif2)If...then...else语句If [ test_command ]ThenCommandsElsecommandsif3)If...then...elif...then...(else)语句If [ test_command ]ThenCommandsElif [ test_command ]ThenCommandsElseCommandsFi4)for ... In语句For loop_varible in argument_list DoCommandsdone5)while语句While test_command_is_trueDoCommandsDone6)until 语句Until test_command_is_trueDoCommandsDone7)case语句Case $variable inMatch_1)Commands_for_1Match_2)Commands_for_2...*) #option for other valuesCommands_for_no_matchesac6.break、continue、exit和return语句Break跳出整个循环体,然后执行循环体外接下来的代码;Continue 结束本次循环,继续下次循环;Exit 退出整个脚本,一般在其后加入一个整数(如exit 0),作为返回代码发送给系统;Return 用于在函数中返回数据,或返回一个结果给调用函数7.here文档用于将输入重定向到某个交互式shell脚本或程序,而不需要用户介入。
Shell编程之特殊变量的笔记⼩结$0 $# $n-->$[1..9] $* $@1、在shell中存在着⼀些特殊⽽⼜重要的变如:$1 $0 $#,我们称为特殊的位置变量要从命令⾏,函数,脚本,等传递参数时,就需要在shell脚本中使⽤位置参数变量1. $0:显⽰当前的脚本⽂件名,如果在执⾏脚本时添加了路径,那么全部都会输出2. $n:获取当前执⾏的shell脚本的第n个参数值⽐如:[n=1..9],如果N⼤于9那么就要使⽤{}来定义⽐如${10}3. $#:获取当前shell脚本后⾯接的参数的个数4. $*:获取当前脚本的参数,不加引号和$@是⼀样的加了引号;例如"$*" 则表⽰单个字符串。
相当于"$1 $2 $3"5. $@:同样也是获取当前shell的参数,不加引号和$*是⼀样的,那么加了引号如:"$@" 表⽰将所有的参数视为不同独⽴的字符串,相当于"$1" "$2"..总结:$*和$@不加双引号是没有任何区别的,有双引号两者就有区别1)$1 $2 特殊变量实战[root@yankerp src]# cat test.sh #查看脚本的内容#!/bin/bashecho $1 ---<定义了$1[root@yankerp src]# source test.sh yankai #执⾏的脚本的时候将yankai赋值给脚本中的1yankai #输出yankai[root@yankerp src]#例2:[root@yankerp src]# cat test.sh #脚本内容#!/bin/bashecho $1[root@yankerp src]# source test.sh zhangsan lisi #zhansgan lisi是两个字符串以空格分割zhangsan #只输出了zhangsan,因为脚本中只定义了$1[root@yankerp src]#例3:[root@yankerp src]# cat test.sh #查看脚本的内容#!/bin/bashecho $1[root@yankerp src]# source test.sh "zhangsan lisi" #加双引号表⽰⼀个字符串参数zhangsan lisi #最后输出结果为zhangsan lisi[root@yankerp src]#例4:在脚本中添加$1 $2测试:[root@yankerp src]# cat test.sh #查看脚本的内容#!/bin/bashecho $1 $2 定义了$1 $2[root@yankerp src]# source test.sh zhangsan lisi #在执⾏脚本的时候定义了两个字符串zhangsan lisi #说明 zhangsan赋值给了$1 lisi赋值给了$2 输出结果为 zhangsan lisi[root@yankerp src]#同时也可以这样加双引号如下:[root@yankerp src]# cat test.sh #查看脚本的内容#!/bin/bashecho $1 $2[root@yankerp src]# source test.sh "zhangsan lisi" yankai #""表⽰⼀个字符串zhangsan lisi yankai #输出结果[root@yankerp src]#2)当我们⼀个个的输⼊echo $1---15时会感觉很慢我们可以使⽤以下命令来接收命令传递的15个参数[root@yankerp src]# echo \${1..15}$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15将输出的内容导⼊到test.sh⽂件中[root@yankerp src]# echo \${1..15} > test.sh[root@yankerp src]# cat test.sh$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15[root@yankerp src]#我们在脚本第⼀⾏加⼊echoecho $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $153)打印26个字母如下:[root@yankerp src]# echo {a..z}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传⼊26个字母a-z 作为26个参数[root@yankerp src]# cat test.shecho $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 #脚本内容[root@yankerp src]# source test.sh {a..z} #传⼊26个字母a b c d e f g h i a0 a1 a2 a3 a4 a5 #位置参数⼤于9后,输出的内容就不对了[root@yankerp src]#当位置参数⼤于9时上⾯已经提到了我们可以使⽤{}来定义如下:[root@yankerp src]# cat test.shecho $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}再次·执⾏[root@yankerp src]# source test.sh {a..z}a b c d e f g h i j k l m n o4)$0特殊变量实战[root@yankerp src]# cat y.sh#!/bin/bashecho $0当我们不带路径运⾏脚本,它会打印脚本的名称,如下:[root@yankerp src]# sh y.shy.sh当我们带绝对路径来执⾏脚本时,它会输出路径+脚本名[root@yankerp src]# sh /usr/local/src/y.sh/usr/local/src/y.sh介绍dirname ---- basename[root@yankerp src]# dirname /usr/local/src/y.sh/usr/local/src[root@yankerp src]# basename /usr/local/src/y.shy.sh·dirname功能:获取脚本的路径·basename:获取脚本的名称例如:[root@yankerp src]# cat y.sh#!/bin/bashdirname $0basename $0[root@yankerp src]# sh /usr/local/src/y.sh/usr/local/srcy.sh[root@yankerp src]#5)$#特殊变量获取传参个数实践[root@yankerp src]# cat test.shecho $1 $2 $3 $4 $5 $6 $7 $8 $9 < 9个位置参数变量echo $# <----加⼊$#[root@yankerp src]# source test.sh {a..z} <传⼊26个字符a b c d e f g h i -----<只接收9个变量26 ----<传⼊26个字符。