变量

shell script是一种脚本语言,变量的定义是通过

  1. myName=HYB

这样的形式定义的。

当存在空格时,可以通过双引号或单引号将其变为字符串。双引号不进行转义,单引号将内容进行转义为一般字符。\会进行转义。

执行命令

通过小括号$(command)或者是`command`可以执行指令,将执行结果返回。

?为上一个指令返回的值

命令

export

可以显示或增添变量,仅在当前会话中有效。

比如 export PATH=$PATH:/bin/bash

还可以将父进程中的自定义变量传递到子进程中。

export myName

echo

将变量进行输出

echo ${PATH}

unset

删除变量 unset myName

read

通过read可以接收键盘输入,如

read name

即可将键盘输入存入name变量中。

参数-t为限时,-p为提示文字。

declare

可以设置变量。declare [-aixr] variable 。-a为数组,-i为整形,-x为将其变为环境变量,-r将其设为不可改变。

test

可以对文件属性进行测试。

test -d file -a -w file 对file是否为目录并且具有w权限进行测试

控制符

删除

#为从前开始懒惰的匹配删除

##为从前开始贪婪的匹配删除

echo ${path##/*:}为只保留path的最后一个的删除操作

%为从后开始懒惰的匹配删除

%%为从后开始贪婪的匹配删除

echo ${path%%/*:}为只保留path的最后一个的删除操作

替换

${变量/旧字符串/新字符串}替换第一个匹配项

${变量//旧字符串/新字符串}替换所有匹配项

值的计算

${var-default}通过使用-可以设置变量默认值,变量var不存在时就会将default值赋予变量。

${var:-default}变量为空是也会设置默认值。

正则表达式

通配符

字符 含义
[:alnum:] 0-9, AZ, az
[:alpha:] A-Z, a-z
[:blank:] 空格及tab
[:cntrl:] 代表键盘上面的控制按键,亦即包括CR, LF, Tab, Del.. 等等
[:digit:] 0-9
[:graph:] 空格与tab外的其他所有按键
[:lower:] a-z
[:print:] 所有能被打印的字符
[:punct:] 标点符号
[:upper:] A-Z
[:space:] 空白字符,包括空格键, [Tab], CR 等等
[:xdigit:] 代表16 进位的数字类型,因此包括: 0-9, AF, af 的数字与字符

控制符

‘[char]’为char中的任意一个字符

‘[^char]’为不在char中的任意一个字符

^表示行首,$表示行尾

.为任意一个字符,*为重复0到无限次前一个字符

+为1个或以上前一个字符,?为0个或一个前一个字符

{a,b}为重复前一个字符的a到b次,()为组群

|为或符号

命令的执行

cmd;cmd可以按顺序从前到后执行命令

&&和||为逻辑运算符,遵循短路原则,对命令返回结果是否正确进行判断,也就是&&要两个都成功执行,||要最起码一个成功执行

管线

|为管线,前面的标准输出会作为下一个指令的标准输入。

减号

在管线中,可以用-代替在指令中代替stdin和stdout

管线命令

cut

从每行输出中切分出一部分

cut [-bn] [file]

cut [-c] [file]

cut [-df] [file]

-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。

-c :以字符为单位进行分割。

-d :自定义分隔符,默认为制表符。

-f :与-d一起使用,指定显示哪个区域。

-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除

echo ${PATH} | cut -d ':' -f 3,5 将PATH变量按:进行分割,取出来第3-5项

grep

从输出中提取部分行

grep [-acinv] [--color=auto] '搜寻字串' filename

选项与参数:

-a :将binary文件以text文件的方式搜寻资料

-c :计算找到'搜寻字串'的次数

-i :忽略大小写的不同

-n :输出行号

-v :反向选择,亦即显示出没有'搜寻字串' 内容的那一行!

last | grep 'root'

sort

排序,按照字典序排序

sort [-fbMnrtuk] [file or stdin]

选项与参数:

-f :忽略大小写的差异,例如A 与a 视为编码相同;

-b :忽略最前面的空白字元部分;

-M :以月份的名字来排序,例如JAN, DEC 等等的排序方法;

-n :使用『纯数字』进行排序(预设是以文字型态来排序的);

-r :反向排序;

-u :就是uniq ,相同的资料中,仅出现一行代表;

-t :分隔符号,预设是用[tab] 键来分隔;

-k :以那个区间(field) 来进行排序的意思

cat /etc/passwd | sort -t ':' -k 3,3 以:切分,以第三列排序

uniq

输出仅显示一次uniq [-ic]

选项与参数:

-i :忽略大小写字元的不同;

-c :进行计数

wc

统计字数。wc [-lwm]

选项与参数:

-l :仅列出行;

-w :仅列出多少字(英文单字);

-m :多少字元;

tee

可以将stdout输出到文件中。tee [-a] file

选项与参数:

-a :以累加(append) 的方式,将资料加入file 当中

tr

将文本替换或删除。tr [-ds] SET1 ...

选项与参数:

-d :删除讯息当中的SET1 这个字串;

-s :取代掉重复的字元!

last|tr [a-z] [A-Z] 将小写替换成大写

last|tr -d :从输出中删除:

col

将输出按列切分,并将列间tab分隔符改为一个“ ”。

last||col -x

join

将两个文件以行为单位拼接到一起。join [-ti12] file1 file2

选项与参数:

-t 预设以空白字元分隔资料,并且比对『第一个栏位』的资料,

如果两个档案相同,则将两笔资料联成一行,且第一个栏位放在第一个!

-i :忽略大小写的差异;

-1 :这个是数字的1 ,代表『第一个档案要用那个栏位来分析』的意思;

-2 :代表『第二个档案要用那个栏位来分析』的意思。

paste

将两个文件的行直接拼合,以tab分割

paste test1 teatime2

expand

将tab键转换为空格键

split

split [-bl] file PREFIX

选项与参数:

-b :后面可接欲分割成的档案大小,可加单位,例如b, k, m 等;

-l :以行数来进行分割。

xargs

xargs [-0epn] command

选项与参数:

-0 :如果输入的stdin 含有特殊字符,例如`, , 空白键等等字元时,这个-0 参数

可以将它转义。

-e :这个是EOF (end of file) 的意思。后面可以接一个字符串,当xargs分析到这个字串时,

就会停止继续工作!

-p :在执行每个指令的argument时,都会询问使用者的意思;

-n :后面接次数,每次command指令执行时,要使用几个参数的意思

cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -p -n 1 id 将/etc/passwd中的:前的第一部分的前三行取出来,每次作为1个参数交由id指令处理

sed

sed [-nefr] [动作]

选项与参数:

-n :使用安静(silent)模式。在一般sed 的用法中,所有来自STDIN 的资料一般都会被列出到萤幕上。

但如果加上-n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

-e :直接在指令列模式上进行sed 的动作编辑;

-f :直接将sed 的动作写在一个档案内, -f filename 则可以执行filename 内的sed 动作;

-r :sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)

-i :直接修改读取的档案内容,而不是由萤幕输出。

动作说明: [n1[,n2]]function

n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作

是需要在10 到20 行之间进行的,则『 10,20[动作行为] 』

function 有底下这些咚咚:

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~

c :取代, c 的后面可以接字串,这些字串可以取代n1,n2 之间的行!

d :删除,因为是删除啊,所以d 后面通常不接任何咚咚;

i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

p :列印,亦即将某个选择的资料印出。通常p 会与参数sed -n 一起运作~

s :取代,可以直接进行取代的工作哩!通常这个s 的动作可以搭配正规表示法!

例如1,20s/old/new/g

nl /etc/passwd | sed '2,5d' 打印出来passwd然后删除第2-5行

脚本的编写

参数的传递

$# 表示传入脚本参数的个数

$@ 表示传入参数的数组

$* 表示传入参数的字符串

$0 $1 $2 $3 分别代表执行的脚本/函数名,传入的第1,2,3个参数

shift 指令可以从前到后移走参数

脚本的运算

var=$((运算内容))

脚本的判断

[]可对脚本内的表达式进行判断

[]内的内容要使用空格进行分割,内容粘连会导致逻辑出错。

脚本的流程控制

判断语句

多个条件判断(if ... elif ... elif ... else)分多种不同情况执行

  1. if [条件判断式一]; then
  2. 当条件判断式一成立时,可以进行的指令工作内容;
  3. elif [条件判断式二]; then
  4. 当条件判断式二成立时,可以进行的指令工作内容;
  5. else
  6. 当条件判断式一与二均不成立时,可以进行的指令工作内容;
  7. fi

分支语句

  1. case $变量名称in <==关键字为case ,还有变量前有钱字号
  2. "第一个变量内容" ) <==每个变量内容建议用双引号括起来,关键字则为小括号)
  3. 程序段
  4. ;; <==每个类别结尾使用两个连续的分号来处理!
  5. "第二个变量内容" )
  6. 程序段
  7. ;;
  8. * ) <==最后一个变量内容都会用*来代表所有其他值
  9. 不包含第一个变量内容与第二个变量内容的其他程序执行段
  10. exit 1
  11. ;;
  12. esac

循环

  1. while [ condition ] <==中括号内的状态就是判断式
  2. do <==do是循环的开始!
  3. 程序段落
  4. done <==done是循环的结束
  5. until [ condition ]
  6. do
  7. 程序段落
  8. done
  9. for var in con1 con2 con3 .../for var in $(seq 1 100)
  10. do
  11. 程序段
  12. done
  13. for ((初始值;限制值;执行步阶))
  14. do
  15. 程序段
  16. done

函数

  1. function fname () {
  2. 程序段
  3. }

执行与debug

sh [-nvx] scripts.sh

选项与参数:

-n :不要执行script,仅查询语法的问题;

-v :再执行sccript 前,先将scripts 的内容输出到萤幕上;

-x :将使用到的script 内容显示到萤幕上,这是很有用的参数!

执行方式的区别

使用sh或.直接执行时,系统会进入脚本子线程运行脚本

当使用source 指令执行脚本时,会直接在当前线程执行脚本

shell script简单笔记的更多相关文章

  1. bash shell学习-shell script基础 (笔记)

    A chain no stronger than its weakest link. "一着不慎,满盘皆输" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版)  Linux ...

  2. shell script 入门 笔记

    shell script 入门 在 shell script 注意必须使用完全相同写在下面: 1.  指令的运行是从上而下.从左而右的分析与运行: 2.  指令的运行就如同第五章内提到的: 指令.选项 ...

  3. shell script 学习笔记-----shell变量

    1.在赋值语句name=value中不能存在空格,例如:name = value这样的形式会被认为是三个变量,因为本质上来说,脚本的内容就是传给shell程序的变量,而变量之间是通过空格区分的.如果想 ...

  4. shell script 学习笔记-----if,for,while,case语句

    1.if内的判断条件为逻辑运算: 2.if内的判断条件为目录是否存在,文件是否存在,下图先检验目录/home/monster是否存在,然后再检测/home/monster中的file.txt文件是否存 ...

  5. shell script 学习笔记-----命令执行

    1.PATH变量:shell最主要的功能就是执行用户输入的命令,例如当用户输入一条“ls”命令之后,shell就要找到该命令对应的文件并执行.通常shell都会设置一个名叫PATH的环境变量,其中保存 ...

  6. shell script 学习笔记-----标准输出

    1.将标准输出(stdout)和标准错误输出(stderr)分别重定向到两个不同的文件 其中符号'>'默认将标准输出重定向,意思和'1>'相同,‘2>'表示重定向标准错误输出,数字1 ...

  7. 菜鸟教程之学习Shell script笔记(中)

    菜鸟教程Shell script学习笔记(中) 以下内容是学习菜鸟教程之shell教程,所整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-sh ...

  8. 菜鸟教程之学习Shell script笔记(下)

    菜鸟教程Shell script学习笔记(下) 以下内容是学习菜鸟教程之shell教程,所整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-sh ...

  9. Shell Script Notes

    shell Script学习笔记 <鸟哥的Linux私房菜 3rd Edition>: @1:若变量内容中包含空格字符,则可使用双引号"或单引号'将变量内容结合起来,但不同的是: ...

随机推荐

  1. 【BZOJ3684】大朋友和多叉树(拉格朗日反演)

    题目链接 题意 求满足如下条件的多叉树个数: 1.每一个点的儿子个数在给定的集合 \(S\) 内 2.总的叶子节点树为 \(s\) 儿子之间有顺序关系,但节点是没有标号的. Sol 拉格朗日反演板子题 ...

  2. 在javascript中,如何判断一个被多次encode 的url 已经被decode到原来的格式?

    % 而不能被无限次decodeURIComponent 可以用%来进行判断

  3. Trie树简介

    Trie树, 即字典树, 又称单词查找树或键树, 多叉树 基本性质 根节点不包含字符,除根节点外每一个节点都只包含一个字符 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串 每个节点 ...

  4. httpClient和RestTemplate的使用

    1.httpClient的使用 <dependency> <groupId>org.apache.httpcomponents</groupId> <arti ...

  5. VGA/DVI/HDMI/DP/Type-C等常用显示接口对比介绍

    在我们的生活中,无论是电脑.电视还是投影设备等等,都离不开视频输出接口,尤其在显卡上面,通常会出现3种甚至更多的接口.很多人并不了解其中的区别,觉得只要有画面输出就可以了,其实对于很多显示器来说并非如 ...

  6. sh_04_第1个函数改造

    sh_04_第1个函数改造 name = "小明" # say_hello() # Python 解释器知道下方定义了一个函数 def say_hello(): "&qu ...

  7. Oracle--表有LONG类型复制或导数报ORA00990

    SYS@racdb1> create table siebel.S_ORG_EXT_201707101650 as select * from siebel.S_ORG_EXT where 1= ...

  8. Httpwatch抓包

    一.下载Httpwatch 二.抓包 1.启动Httpwatch 打开浏览器-选择工具-Httpwatch professional(仅适用于IE和火狐40及以下浏览器) 2.开始抓包 点击“Reco ...

  9. python学习之路(25)

    继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base clas ...

  10. es6 语法的

    es5 中提供了 两个声明变量的方式 var function es6 中提供了 四种声明变量的方式 let const class import 现在,定义变量的关键字有 6 个了 备注:不能忽略函 ...