Shell 脚本基础学习笔记

合集下载

自己总结的shell脚本学习笔记(未完待续)

自己总结的shell脚本学习笔记(未完待续)

case 详解:
case expr in # expr 为表达式,关键词 in 不要忘!
pattern1)
# 若 expr 与 pattern1 匹配,注意括号
commands1 # 执行语句块 commands1
;;
# 跳出 case 结构
pattern2)
# 若 expr 与 pattern2 匹配
let 和 双圆括号中可以使用算术表达式,而中括号不能 let 和 双圆括号中,操作符两边可以不留空格
2. 字符串测试运算
test -z string: 判断字符串长度是否为 0,即判断字符串是否为空,为空返 回真,非空返回假
test -n string: 判断字符串长度是否不为 0,即判断字符串是否非空,为空 返回假,非空返回真
如有任何疑问,请联系作者,作者 QQ:1028150787,或者到韦东山群共同讨论
4
Shell 脚本编程学习笔记 2013 年 4 月 27 日 追风~忆梦
几点说明: 1. 表达式 expr 按顺序匹配每个模式,一旦有一个模式匹配成功,
则执行该模式后面的所有命令,然后退出 case。 2. 如果 expr 没有找到匹配的模式,则执行缺省值 “ *) ”
第一节 shell 运算符应用
表达式测试包括字符串测试、整数测试、文件测试及逻辑测试。 内置测试命令 test 通常用 test 命令来测试表达式的值,如下:
x=5; y=10 test $x -gt $y echo $? test 命令可以用方括号来代替: x=5; y=10 [ $x -gt $y ] echo $? 2.x 版本以上的 Bash 中可以用双方括号来测试表达式的值, 此时可以使用通配符进行模式匹配,如: name=Tom [ $name = [Tt]?? ] echo $?

shell编程笔记

shell编程笔记

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`语句返回一个值。

shell 脚本入门笔记

shell 脚本入门笔记

#!/bin/bash放在第一行用于告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。

文件保存为**.sh。

执行方式:1.chmod777 test.sh ./test.sh2./bin/sh test.shecho用于向窗口输出文本定义变量时,变量名不加$符号。

例如:your_name=""还可以使用语句进行赋值:for file in `ls /etc`或for file in $(ls /etc)以上语句将/etc 下目录的文件名循环出来。

使用变量使用一个定义过的变量,只要在变量名前面加美元符号即可,如:your_name="qinjx"echo $your_nameecho ${your_name}变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,建议给所有变量加上花括号。

只读变量readonly+变量名删除变量unset+变量名不能删除只读变量Shell 字符串字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。

单双引号的区别跟PHP 类似。

单引号str='this is a string'单引号字符串的限制:单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

双引号your_name='qinjx'str="Hello, I know you are \"$your_name\"! \n"双引号的优点:双引号里可以有变量双引号里可以出现转义字符拼接字符串your_name="qinjx"greeting="hello, "$your_name" !"greeting_1="hello, ${your_name} !"echo $greeting $greeting_1获取字符串长度string="abcd"echo ${#string}输出4提取子字符串以下实例从字符串第2 个字符开始截取4 个字符:string="runoob is a great site"echo ${string:1:4}输出unoo查找子字符串查找字符"i 或s" 的位置:string="runoob is a great company"echo `expr index "$string" is`输出8注意:以上脚本中"`" 是反引号,而不是单引号"'",不要看错了哦。

最全面实用的LINUXSHELL脚本编程知识点总结

最全面实用的LINUXSHELL脚本编程知识点总结

最全面实用的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脚本学习笔记day2

shell脚本学习笔记day2

中途出现了好几个错误代码如下#!/bin/bashResult = $(expr $1\*$2)Echo “$1*$2 = $result”./test.sh 6 12\* 转义字符*以前是通配符\*之后就是真正意义上的乘法$到底是啥意思呢查找有root这一行这两种用法总结就是cat +文件名|grep 关键字cat+关键字+文件名非常知识点1什么是正则表达式?匹配特定的文本,在文本中模糊查找一些内容将其所在的行打出来More page 文本编译器利用到了2.正则表达式组成元素meta说明了一些问题貌似好像就是模糊搜索问题搜索的字符+···的个数就是说得已知要搜索的字符的位数以及特定信息\想要shell知道a仅是普通符号/为啥有4行呢因为grep s*t meta表示t前面有0个或者多个s字符输出以a为行首的字符串以y结束的行想查找以ban开头gk为结束的字符Grep ban【gk】文件名字“,”号前面的a至少出现一次或者多次a出现2到4次xyz存入1的存储单元所以答案是xyz123xyz为啥存到一单元呢-E指的是ere标准a出现2,到3次显示有数字的字符grep "[[:digit:]]" abcAb当做一个整个单词第二行abc是一个整体相对的ab就不是一个单词了所以出现上述情况grep “\<ab\>”extAb并米有作为一个单词匹配什么叫做联合字段-o默认全部输出-t默认是以空格分隔的正则的表达式的两种标准。

shell笔记

shell笔记
第一章、shell编程基础
shell是核心程序kernel之外的命令解析器,是一个程序同时是一种命令语言和程序设计语言。
作为一种命令语言可以交互式的解析用户输入的命令。
作为一种程序设计语言他定义了各种参数,并且提供了高级语言才有的程序控制结构,他虽然不是linux核心系统的一部分,但是他调用了linux核心大部分的功能来执行程序建立文件并以并行的方式来协调程序的运行。
unset 用于取消变量的定义
-- 表明选项结束
-f 删除只读变量,
引号、
变量和替换操作,在脚本中执行变量替换时最容易犯得一个错误就是引用错误

echo *
echo "*"
echo \*
运算符、
~op1 反运算符,把op1中所有的二进制为1变为0,0变为1
op1<<op2 左移运算符,把op1中的二进制位向左移动op2位,忽略最左端移出的各位,最右端各位补上0值,每做一次按位左移就有实现op2乘以2
环境变量主目录:$HOME/.bash_profile(/etc/profile)
#export test="123" 设置环境变量
#env 查看环境变量
#export 查看环境变量
环境变量既可以运行于父进程也可以运行于子进程中。本地变量则不能运行于所有的子进程中。
本地变量包含环境变量
变量替换(显示变量):用变量的值替换他的名字,在变量名前加$,使用echo命令可以显示单个变量取值。
echo ${variable name} 显示实际值到variable name
echo ${variable name:+value} 如果设置了variable name,则显示其值value,否则为空。

详细介绍Linux shell脚本基础学习

详细介绍Linux shell脚本基础学习

详细介绍Linux shell脚本基础学习(一)Linux 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=2echo "this is the $numnd"这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。

可以使用花括号来告诉shell我们要打印的是num变量:num=2echo "this is the ${num}nd"这将打印:this is the 2nd1.1.4 环境变量由export关键字处理过的变量叫做环境变量。

shell编程基础知识汇总

shell编程基础知识汇总

1.shell程序的执行先将shell脚本放置于linux系统任意目录下,最好自己创建一个目录,如然后chmod命令对脚本进行赋予可执行权限。

选择./xxx.sh或者bash –x xxx.sh执行shell脚本,后者可以显示每条命令的运行结果,调试脚本时候非常有用。

2.变量变量名区分大小写,无须声明,可以直接赋值;引用变量需要在变量前面加$符号。

注意:直接赋值时变量和=之间不带空格,如'var=100'。

如果需要用变量和其他字符组成新的字符串,可以把变量用{}括起来。

变量后还可以加一个参数表示如果变量没有初始化就使用的值.形式是{var:-val},例如:${varname:=word} 如果varname存在且不为空,则使用varname的值;否则将其值设置为word,并返回其值${ varname: +message} 如果varname存在且非full,则返回word;否则返回null对于未赋值的变量,bash会以空值对待,也可以使用unset命令来清除给变量赋的值。

数组形式为:变量名[下标]=值,或者变量名={多个值}。

下标可以用字符。

declare或typeset可以使用+/-r选项来设置/撤销变量的只读属性。

export可以把变量输出到环境中,以使其他程序也可以使用。

相反,使用local声明的变量是局部变量,仅供在当前函数内使用。

特定shell变量:$0当前命令对应的可执行文件名;$1-$9命令参数;$#参数个数;$*所有参数;$@所有参数,并且每个参数以'括住;$$当前进程ID号;$?最后的命令的退出状态,如果正常退出则返回0,反之为非0值。

3.特有命令: 空,永远返回true,可用于while循环作为条件shift 可以后跟一个数字n来左移n个参数read 从输入设备读入变量值,后必须跟一个变量名echo 显示信息eval 它把参数连接成一个命令让shell执行exec 执行命令return/break/continue 在函数和循环中使用4.比较语句使用test expression或[ expression ]形式. 注意,在bash语法中,if语句中应该使用[[ ]]进行判断。

shell编程基础知识汇总

shell编程基础知识汇总

shell编程基础知识汇总Shell编程是一种在操作系统中通过命令行进行脚本编程的方式。

它是一种相对简单的编程语言,很容易学习和使用,并且在Unix和类Unix操作系统上广泛应用。

在本文中,我将为您汇总一些基础的Shell编程知识。

1. Shell脚本的基本结构:Shell脚本由一系列命令和控制结构组成。

它们被写在一个文本文件中,文件的第一行以“#!”开头,后面是解释器的路径。

脚本的主体部分包含了一系列的命令,可以通过换行符或分号将它们分隔开。

2. 变量:Shell脚本中可以定义和使用变量。

变量可以用来存储值,并在脚本中通过变量名进行引用。

在Shell中变量是大小写敏感的。

变量赋值可以直接使用“=”,但在使用变量时需要使用$符号。

例如:```name="John"echo "My name is $name"```3. 输入输出:Shell脚本可以通过读取标准输入和向标准输出打印信息来与用户进行交互。

标准输入通常通过键盘输入,标准输出通常在终端上显示。

例如:echo "Enter your name:"read nameecho "Hello, $name"```4. 命令行参数:Shell脚本可以从命令行接收参数,并在脚本中使用这些参数。

命令行参数可以通过特殊变量$1,$2等来引用,其中$1表示第一个参数,$2表示第二个参数,以此类推。

例如:```echo "Hello, $1"```运行脚本并传入参数:```./script.sh World```输出:```Hello, World5. 条件语句:Shell脚本可以使用条件语句来根据条件执行不同的命令。

条件语句的结构通常是使用if,elif和else关键字来定义多个分支,并使用then和fi关键字来表示分支的开始和结束。

例如:```if [ $1 -gt 10 ]; thenecho "Greater than 10"elif [ $1 -lt 10 ]; thenecho "Less than 10"elseecho "Equal to 10"fi```运行脚本并传入参数:```./script.sh 5```输出:Less than 10```6. 循环结构:Shell脚本可以使用循环结构来重复执行一系列命令。

shell学习笔记

shell学习笔记

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]是要创建的用户名。

shell基础知识总结

shell基础知识总结

shell基础知识总结1. shell 对于⼀台计算机⽽⾔,其硬件受系统内核的控制,使⽤者想要控制计算机,就必须有与系统内核进⾏通讯的⼿段。

⽽shell就是使⽤者与计算机进⾏通讯的⼿段之⼀。

从命名上看,shell其实是相对于kernel(内核)⽽⾔,指系统与外界(使⽤者)进⾏接触的部分,⼀个提供系统功能给⽤户使⽤的软件,它接受来⾃⽤户的指令,然后调⽤相应的应⽤程序。

为了满⾜不同的需求,shell提供了两种执⾏命令⽅式:a. 交互式:解释并执⾏⽤户输⼊的命令或者⾃动地解释和执⾏预先设定好的⼀连串的命令。

b. 程序设计式:作为⼀种脚本语⾔,提供变量、控制结构和函数,再通过解释器解释并执⾏。

Linux上常见的shell有sh、bash、ksh、tcsh等,不同解释器在某些语法的执⾏⽅⾯可能有些不同。

通过查看/etc/shells⽂件就可以知道本系统所⽀持的shell解释器类型。

如shells的⽂件内容如下:ryeshen@~$ cat /etc/shells/bin/sh/bin/bash/sbin/nologin/usr/bin/sh/usr/bin/bash/usr/sbin/nologin/bin/tcsh/bin/csh/bin/ksh/bin/zsh ⽽linux默认是⽤的解释器是bash。

在脚本头可以声明本脚本所使⽤的解释器,声明⽅式: #!/bin/bash2. 变量a. 赋值赋值⽅式:variable_name = variable_value等号两边不能有空格符;增加变量内容:PATH=”$PATH”:/home/bin取消变量:unset variable_name变量类型:可以使⽤declare [[-/+]aixr] [name[=value] …],其中-表⽰赋予变量属性,+表⽰去除变量属性,a-数组,i-整数,r-只读,x-环境变量b. ⾃定义变量与环境变量使⽤“=”赋值得到的⾃定义变量,这个变量的作⽤域为当前shell进程。

shell学习笔记

shell学习笔记

Shell学习笔记1、什么是shellshell翻译成壳的意思,它是包裹在linux内核外层的,一个可通过一系列的linux命令对操作系统发出相关指令的人机界面。

shell可以通过其条件语句和循环语句等,把一系列linux命令结合在一起,形成一个相当于面向过程的程序,shell script,来实现一些较为复杂的功能。

总括,shell是linux命令集的概称,是属于命令行的人机界面。

shell的作用就是运行linux的命令shell的内置命令在装shell时就有的,源码与shell的源码在一起,不同的shell有不同的内置命令;linux的命令,其实就是没有图形界面的程序,与shell不是同时安装的,独立于不同的shell 不同的shell使用不同的内部命令,可以使用相同的程序很多shell的内置命令名,以及使用格式非常象,甚至是一样的,但与linux命令仍然是不同的2、如何执行shell脚本方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:cd /data/shell./hello.sh./的意思是说在当前的工作目录下执行hello.sh。

如果不加上./,bash可能会响应找到不到hello.sh的错误信息。

因为目前的工作目录(/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。

查看PATH的内容可用echo $PASH 命令。

现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执行。

方法二:以绝对路径的方式去执行bash shell脚本:/data/shell/hello.sh方法三:直接使用bash 或sh 来执行bash shell脚本:cd /data/shellbash hello.sh 或者sh hello.sh注意,若是以方法三的方式来执行,那么,可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。

Shell脚本学习笔记1—变量

Shell脚本学习笔记1—变量

Shell脚本学习笔记1—变量
工作中一直在linux环境下做开发,或多或少的都需要写一些shell脚本或者命令来提升工作效率或者做版本开发的自动化。

最近组里来了很多新员工,他们对于shell的写作很不熟悉,闹出了很多笑话,于是我就让他们去学习下,同时我自己也再梳理下shell的一些语法,便于指导新员工的工作。

变量命名
shell的变量命名有一些基本的规范。

1、只能使用英文字母,数字和下划线,且变量首个字符不能是数字。

这点和C语言比较类似。

2、变量名中不能含有空格和标点符号等。

3、不能使用bash的内置关键字或者命令作为变量名
4、一般变量名称要含义清晰。

一些合法的变量名如下:
一些非法的变量名如下:
变量赋值
shell脚本中变量的赋值比较特殊,=号前后不允许有空格。

变量赋值前后有空格,shell脚本在执行时就会认为变量名是一个命令,最近我们组新员工就写了这样一个bug。

你看,他在执行时报错num_1找不到。

如果我们将空格去掉,就可以得到正确的结果。

变量使用
在变量前面加上$符号即可使用变量。

为了防止歧义,可以在变量的前后加上{}。

shell常用命令及相关知识点

shell常用命令及相关知识点

shell常用命令及相关知识点一、什么是shell二、shell脚本入门1、脚本格式:#!/bin/bash 开头(指定解析器)2、脚本执行方式:开子shell方式:sh/bash sh脚本不开子shell方式:.,source sh脚本区别:环境变量的继承关系,子shell中的变量父shell不可见3、变量:1、系统预定义变量:$HOME,$PWD,$SHELL,$USER2、自定义变量:变量名=变量值撤销变量:unset 变量名声明静态变量:readonly 变量不能unset3、变量定义规则:变量名由数字、字母、下划线组成,不能以数字开头,环境变量建议大写等号两边不能有空格bash中默认的是字符串,无法直接进行数值运算变量中如果有空格,需要用双引号或单引号引起来4、export 变量把变量提升为全局变量,可供其他shell程序使用5、特殊变量:$n,$0表示脚本名称,$1-9表示脚本输入的第1-9个参数$#,$#表示输入参数的个数$*,—$*把参数看成一个整体,代表所有的参数$?,—最后一次命令的返回状态,0表示执行成功,非0表示执行失败4、运算符$((运算式))或$[运算式]5、条件判断:1)语法:test condition[ condition ] condition前后有空格2)常用判断条件:(1)比较:-eq :等于-ne :不等于-lt :小于-le :小于等于-gt:大于-ge:大于等于(2)按照文件权限进行判断:-r有读权限-w有写权限-x有执行权限(3)按照文件类型进行判断:-e文件存在-f路径是一个文件-d路径是一个目录6、流程控制(1)单分支if [ 条件判断式 ];then代码段fi或者if [ 条件判断式 ]thenfi(2)多分支if [ 条件判断式 ]then代码段elif [ 条件判断式 ]then代码段else代码段fi注意事项:中括号和条件判断式中间必须有空格,if后面也必须加空格(3)case语句case $变量名 in"值1")代码段1;;代码段2;;*)未匹配上执行该代码段3;;esac(4) for循环for ((初始值;循环控制条件;变量变化)) do代码段donefor 变量 in 值1 值2 值3do代码段done(5)while循环while [ 条件判断式 ]dodone7、函数1)系统函数basename path 取文件名dirname path 取文件的绝对路径2)自定义函数基本语法:[ function ] funname[(]代码段}二、常用命令cat /etc/shells ,,查看linux提供的shell解释器cut [选项参数] filename-f列号,提取第几列-d分隔符,默认为\tawk [选项参数] '/pattern1/{action1} ' filename-F指定文件分隔符-v赋值一个用户定义变量内置变量:FILENAME文件名NR行号NF切割后列的个数sort 选项 filename选项:-n依照数值的大小排序-r以相反的顺序排序-t设置排序时所用分隔符-k指定需要排序的列wc 选项参数 filename选项:-l统计文件行数-w统计文件的单词数-m统计文件的字符数-c统计文件的字节数。

跟着360架构师学shell笔记

跟着360架构师学shell笔记

跟着360架构师学shell笔记Shell是一种用于在操作系统中进行编程的脚本语言,它是系统管理员和架构师必不可少的工具之一。

随着云计算和大数据技术的发展,Shell脚本在配置管理、自动化运维和数据处理等方面发挥着越来越重要的作用。

在本文中,我们将跟着360架构师学习Shell,探讨Shell脚本的基础知识、实战应用和最佳实践。

一、Shell脚本的基础知识1. Shell脚本的语法和特点Shell脚本是一种解释型语言,它使用命令解释器(如Bash、Zsh 等)来执行命令。

Shell脚本的语法类似于C语言,但更加灵活简洁。

在Shell脚本中,可以通过变量、条件语句、循环语句、函数等来实现各种功能。

此外,Shell脚本还支持命令行参数传递、输入输出重定向、管道等特性,方便进行系统管理和数据处理。

2. Shell脚本的基本命令和常用工具在Shell脚本中,可以使用一系列Linux命令和工具来完成各种任务。

比如,通过ls、cd、mkdir等命令可以进行文件和目录的操作;通过grep、awk、sed等工具可以进行文本处理;通过ssh、rsync、scp等命令可以进行远程操作。

掌握这些基本命令和工具对于编写Shell脚本至关重要。

3. Shell脚本的调试和优化编写Shell脚本常常面临各种错误和性能问题,因此需要掌握调试和优化技巧。

在Shell脚本中,可以通过set -x命令开启调试模式,以查看每个命令的执行过程;通过time命令统计脚本的执行时间,找出性能瓶颈。

此外,还可以通过代码重构、并发编程等方式来优化Shell脚本,提高效率和可维护性。

二、Shell脚本的实战应用1.系统管理和配置管理Shell脚本在系统管理和配置管理方面有着广泛的应用。

比如,可以通过Shell脚本自动安装软件包、配置系统环境;通过Shell脚本定时备份数据、清理日志;通过Shell脚本监控系统状态、报警处理异常等。

这些任务可以通过编写简单的Shell脚本来实现,提高工作效率和可靠性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Shell 脚本基础学习笔记shell脚本的解释用“#”号,本文档为了习惯方便,解释大都用“//”,也有用“#”的SHELL 最基本的语法基本元字符集及其含义(2008-05-24)abc 表示abc 三個連續的字符, 但彼此獨立而非集合. (可簡單視為三個char set)(abc) 表示abc 這三個連續字符的集合. (可簡單視為一個char set)a|b 表示單一字符, 或a 或b .(abc|xyz) 表示或abc 或xyz 這兩個char. set 之一. (註二)[abc] 表示單一字符, 可為a 或b 或c . (與wildcard 之[abc] 原理相同)[^abc] 表示單一字符, 不為a 或b 或c 即可. (與wildcard 之[!abc] 原理相同)^ 只匹配行首$ 只匹配行尾* 只一个单字符后紧跟*,匹配0个或多个此单字符[ ] 只匹配[ ]内字符。

可以是一个单字符,也可以是字符序列。

可以使用-表示[ ]内字符序列范围,如用[ 1 - 5 ]代替[ 1 2 3 4 5 ]\ 只用来屏蔽一个元字符的特殊含义。

因为有时在s h e l l中一些元字符有特殊含义。

\可以使其失去应有意义. 只匹配任意单字符p a t t e r n \ { n \ } 只用来匹配前面p a t t e r n出现次数。

n为次数p a t t e r n \ { n,\ }含义同上,但次数最少为np a t t e r n \ { n,m \ }含义同上,但p a t t e r n出现次数在n与m之间现在详细讲解其中特殊含义1、使用句点匹配单字符例一:beg.n:以beg开头,中间夹一个任意字符。

例二:. . . .X C. . . .:共10个字符,前四个之后为XC例三:列出所有用户都有写权限的目录或文件:ls -l |grep ...x..x..x2、行首以^匹配字符串或字符序列^只允许在一行的开始匹配字符或单词。

例如,使用ls -l命令,并匹配目录。

$ ls -l | grep ^d3、在行尾以$匹配字符串或字符可以说$与^正相反,它在行尾匹配字符串或字符,$符号放在匹配单词后。

例一:列出文件httpd1.conf中所有以单词common结尾的行$grep common$ httpd1.conf或$cat httpd1.conf | grep common$例二:匹配所有空行:^ $例三:只返回包含一个字符的行:^.$4、用\屏蔽一个特殊字符的含义下列字符一般可以认为是特殊字符:CODE:$ . ' " * [] ^ | () \ + ?QUOTE:如:\ .反斜杠后面的字符不再是特殊字符,而是一个普通字符,即句点。

QUOTE:假定要匹配包含^的各行,将反斜杠放在它前面就可以屏蔽其特殊含义:\ ^QUOTE:在正则表达式中匹配以* . p a s结尾的所有文件:\ * \ . p a s即可屏蔽字符*的特定含义。

5、使用\{\}匹配模式结果出现的次数使用*可匹配所有匹配结果任意次,但如果只要指定次数,就应使用\ { \ },QUOTE:此模式有三种形式,即:pattern\{n\} 匹配模式出现n次。

pattern\{n,\} 匹配模式出现最少n次。

pattern\{n,m\} 匹配模式出现n到m次之间,n , m为0 - 2 5 5中任意整数。

例一:匹配字母A出现两次,并以B结尾:CODE:A \ { 2 \ } B匹配值为A A B例二:匹配A至少4次:CODE:A \ { 4 , \ } B可以得结果A A A A B或A A A A A A A B,但不能为A A A B。

例三:如给出出现次数范围,例如A出现2次到4次之间:CODE:A \ { 2 , 4 \ } B则结果为A A B、A A A B、A A A A B,而不是A B或A A A A A B等。

例四:假定从下述列表中抽取代码:QUOTE:1234XC90884523XX90010011XA99129931Xc3445格式如下:前4个字符是数字,接下来是x x,最后4个也是数字,操作如下:[ 0 - 9 ] \ { 4 \ }X X[ 0 - 9 ] \ { 4 \ }QUOTE:具体含义如下:1) 匹配数字出现4次。

2) 后跟代码x x。

3) 最后是数字出现4次。

结果如下QUOTE:1234XC9088 -no match4523XX9001 -match0011XA9912 -no match9931Xc3445 -no match经常使用的正则表达式举例CODE:^ 对行首$ 对行尾^ [ t h e ] 对以t h e开头行[ S s ] i g n a [ l L ] 对匹配单词s i g n a l、s i g n a L、S i g n a l、S i g n a L [Ss]igna[lL]\. 对同上,但加一句点[ m a y M A Y ] 对包含m a y大写或小写字母的行^ U S E R $ 对只包含U S E R的行[tty]$ 对以t t y结尾的行\ . 对带句点的行^ d . . x . . x . . x 对对用户、用户组及其他用户组成员有可执行权限的目录^ [ ^ l ] 对排除关联目录的目录列表[ . * 0 ] 对0之前或之后加任意字符[ 0 0 0 * ] 对0 0 0或更多个[ iI] 对大写或小写I[ i I ] [ n N ] 对大写或小写i或n[ ^ $ ] 对空行[ ^ . * $ ] 对匹配行中任意字符串^ . . . . . . $ 对包括6个字符的行[a- zA-Z] 对任意单字符[ a - z ] [ a - z ] * 对至少一个小写字母[ ^ 0 - 9 \ $ ] 对非数字或美元标识[ ^ 0 - 0 A - Z a - z ] 对非数字或字母[ 1 2 3 ] 对1到3中一个数字[ D d ] e v i c e 对单词d e v i c e或D e v i c eD e . . c e 对前两个字母为D e,后跟两个任意字符,最后为c e\ ^ q 对以^ q开始行^ . $ 对仅有一个字符的行^\.[0-9][0-9] 对以一个句点和两个数字开始的行' " D e v i c e " ' 对单词d e v i c eD e [ V v ] i c e \ . 对单词D e v i c e或d e v i c e[ 0 - 9 ] \ { 2 \ } - [ 0 - 9 ] \ { 2 \ } - [ 0 - 9 ] \ { 4 \ } 对日期格式d d - m m - y y y y[ 0 - 9 ] \ { 3 \ } \ . [ 0 - 9 ] \ { 3 \ } \ . [ 0 - 9 ] \ { 3 \ } \ . [ 0 - 9 ] \ { 3 \ } 对I P地址格式nnn. nnn.nnn.nnn [ ^ . * $ ] 对匹配任意行判断/tmp/mybook是否存在.若不存在则创建[ ! -d /tmp/mybook ]&&mkdir /tmp/mybook&&echo "/tmp/mybook is created!" ||echo "/tmp/mybook is exist!" //这行比较麻烦.有点错都会出问题.注意方括号内的两边有空格.该空格的地方要空格shell使用两种引号和反斜线双引号“”(让引号内的变量生效)单引号‘’(引号内的变量当作一个字符使用)反斜线\(禁用特殊字符功能\$)后引号``(让引号内的命令生效)单引号和双引号的区别在于:单引号是原样显示,双引号则显示出变量的值。

echo time is:'date'abc="100"echo 'time is: $abc'echo "time is: $abc"有时候变量名很容易与其他文字混淆,比如:num=2echo "this is the $numnd"这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。

可以使用花括号(或中括号)来告诉shell我们要打印的是num变量:num=2echo "this is the ${num}nd" //或者echo "this is the $[num]nd"这将打印:this is the 2nd流程控制1) if"if" 表达式如果条件为真则执行then后面的部分:if 条件1 #如果条件1为真then #那么command1 #执行命令1elif 条件2 # 如果条件2为真then #那么command2 # 执行命令2else #如果条件1和条件2都不成立command3 执行命令3fi #完成(if 语句一定要以fi结束)大多数情况下,可以使用测试命令来对条件进行测试。

比如可以比较字符串、判断文件是否存在及是否可读等等…通常用" [ ] "来表示条件测试。

注意这里的空格很重要。

要确保方括号的空格。

[ -f "somefile" ] :判断是否是一个文件[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限[ -n "$var" ] :判断$var变量是否有值[ "$a" = "$b" ] :判断$a和$b是否相等例如://变量$SHELL包含了登录shell的名称,我们和/bin/bash进行了比较if [ "$SHELL" = "/bin/bash" ]; thenecho "your login shell is the bash (bourne again shell)"elseecho "your login shell is not bash but $SHELL"fi[ -f "/etc/shadow" ] && echo "This computer uses shadow passwors"这里&& 就是一个快捷操作符,如果左边的表达式为真则执行右边的语句。

相关文档
最新文档