一、shell变量的相关用法:

变量作为被赋值的一方的时候不加$,只有在使用其值的内容的时候需要加上$,该符号可

1,变量中的单引号‘’、双引号“”“、反单引号‵`、括号()、大括号{}、双括号(())的用法区别

$变量 和 ${变量} 用法相同,建议使用 $变量 这种形式。获取变量的值

变量内容如果没有空格,不要引号;如果有空格,单引号将特殊字符如$解释为一般字符,双引号将发挥$解析变量含义的作用

\将特殊字符变成一般字符

如果需要其他命令提供的信息,可以使用`命令`或者$(命令);建议使用``这种形式

变量内容累加时候,可以采用var=$var"累加内容"或者var=${var}累加内容  两种形式;建议使用var=$var"累加内容"这种形式

两个变量的累加,var3=$var1"$var2"即可

$(())代表进行数值运算 ,当然也可以用 declare -i total=$num1*$num2

2,变量的显示和设置:echo,unset

env显示系统环境变量,local显示语系变量

变量键盘读取:read,声明:declare(默认总是字符串类型);read还可一读取管道流的数据

ls /bin | while read line;do echo $line;done

更容易理解的方式是:

file_list=`ls \bin`

for file_name in $file_list

do

  cat file_name

done

3,变量内容删除、替换

${变量#关键字} 从前删除最短

${变量##关键字} 从前删除最长

${变量%关键字}从后删除最短

${变量%%关键字}从后删除最长

${变量/旧字符串/新字符串}从前替换第一个

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

这就可以解决自己的一个问题:如何获得上一级目录

例如$root_dir=/var/spool/mail

那么获取上级目录可以使用:$root_dir=${root_dir%/*}

如果仅仅得到文件名,可以使用$root_dir=${root_dir##/*/}

其实利用$root_dir=`dirname $root_dir`;root_dir=`basename $root_dir`貌似也可以

4,变量测试:

var=${str-expr}

var=${str:-expr}

var=${str:+expr}

等等,详见p316,

不过这类测试也可以用shell script中的if  test或者[]判断语句  then语句来实现,只不过这种方法相对简单

其他测试功能:test

可以测试文件、目录是否存在;测试文件权限,比较两个整数大小,字符串判断等,也可以进行多重条件判断

和test类型的判断,当然也可以使用[]来进行

二、shell命令中的通配符和正则表达式的区别

注意通配符和正则表达式是不同的

通配符和相关的shell命令结合使用(如ls ),而正则表达式则是用在字符串处理中(有些管道命令也支持正则表达式),以行为单位处理字符产

*匹配0个或者多个,在正则中表示重复前面0次或者多次

?匹配一个,在正则中代表0次或者一次重复前面,在正则中‘.’代表一个任意字符

[]选择范围,同正则

[^]反向选择,同正则

注意.就代表小数点,没有正则里面.*代表0-无穷多个任何字符的概念

如果某个命令支持正则表达式,那么就可以利用正则表达式来处理字符串,例如vi,grep,sed,awk等

如果命令不支持正则表达式,那么就只能使用bash的通配符,如cp,ls,cd等

shell中支持正则的命令是以行为基础的匹配,而通配符则是逐个位置的严格匹配。

三、数据流重定向

标准输出:>(覆盖),>>(追加)

标准错误输出:2>

标准输入<

结束输入<<    例如:cat > catfile<<'eof'

tee 双向重定向

四、命令执行控制&& ||

cmd1 && cmd2 :1正确则执行2;1错误不执行2

cmd1 || cmd2:1错误执行2,1正确不执行2

cmd1&&cmd2||cmd3 :1正确,执行2,否则执行3

五、管道命令

|  :该符号的左侧为标准输出,有则需要是能够接收标准输入的命令

能够产生标准输出的命令:如ls,cat等

能够接受标准输入的命令:cut,grep,sort,wc,uniq,tr,col,join,expand,split ,(这些命令不结合管道|使用的时候,参数多为文件)sed,awk,xargs(处理不支持管道命令的情况)

————————————————————————————————————————————————————————

几种语言的单引号,双引号,字符串连接

shell脚本中:

单引号和双引号都可一表示字符串,单引号中的没有特殊含义,双引号中变量会被解释

如果是字符串和字符串之间的连接,直接书写就可以

如果是变量和字符串之间的链接

var3=$var2“i am var3”

不能写成var3=$var2 i am var3

在python脚本中

单引号和双引号都可以表示字符串,没有什么区别,只是为了方便混合使用

如果想要不被转义,表单本身的含义,可以在字符串前面加上r

字符串之间的连接,不论是字符串与字符串还是变量和字符串,一律采用+

shell scripts 编写基础的更多相关文章

  1. shell 脚本编写基础

    在进行Linux测试时编写脚本是必不可少的,Shell脚本的名称可以随便定义,也不要什么后缀名,例如可以写abc,smartzip这类名称,运行时只要键入 ./smartzip就能运行脚本了.. 每行 ...

  2. CentOS之Shell文件编写基础

    shell文件以.sh结尾,这是一种习惯而已.第一行以#! /bin/bash开头:表示该文件使用的是bash语法: 如果不设置该行,你的shell脚本也可以执行,但是不符合规范.#表示注释. # v ...

  3. 鸟哥的 Linux 私房菜Shell Scripts篇(一)

    参考: http://linux.vbird.org/linux_basic/0340bashshell-scripts.php#script_be http://www.runoob.com/lin ...

  4. shell脚本编程基础介绍

    Linux系统——shell脚本编程基础介绍 1.什么是shell 它是一个命令解释器,在linux/unix操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种操作输出的结果 ...

  5. Linux shell脚本编程基础之练习篇

    shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...

  6. shell脚本编写笔记

    包含转载内容,转载自http://wenku.baidu.com/link?url=jtCHxEYzgGve6P64U3JRQRgU6nhpGvqFLLpWu9I2Htq6hi9TGLudRFkk7r ...

  7. linux 脚本编写基础(一)

    1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在 ...

  8. linux的基本操作(shell 脚本的基础知识)

    shell 脚本的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本 ...

  9. 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)

    第10章 vim程序编辑器 可以将vim看做vi的进阶版本,vim可以用颜色或底线等方式来显示出一些特殊的信息. 为何要学习vim?因为: a. 所有的 Unix Like 系统都会内建 vi 文书编 ...

随机推荐

  1. 虚拟机上首次安装Ubuntu后 root密码设置

    虚拟机下安装ubuntu后root密码设置 问题描述: 在虚拟机下安装了ubuntu中要输入用户名,一般情况下大家都会输入一个自己的网名或绰号之类的,密码也在这时设置过了. 但是当安装成功之后,使用命 ...

  2. webpack打包错误 ERROR in multi ./src/main.js ./dist/bundle.js

    webpack打包错误 ERROR in multi ./src/main.js ./dist/bundle.js:https://www.jianshu.com/p/a55fb5bf75e1

  3. 【7.10校内test】T3经营与开发

    [题目链接luogu] 它……又是个DP 我……我讨厌DP!? 然后又是读入,显然用快读啊:(数据范围还是很大的)(习惯) 然后我们发现,不论是损耗值维修值,还是采矿所得,维修花费,都带着个p,因此我 ...

  4. win10上的Django项目实现内网映射

    网上有很多关于django项目发布uwsgi模块在 windows上的下载以及安装过程, 可是他们也并没有真正的在windows上使用到这个模块(至少目前在网上还没看到过), 而大部分人就是在Djan ...

  5. 在Myeclipse下查看Java字节码指令信息

         在实际项目开发中,有时为了了解Java编译器内部的一些工作,需要查看Java文件对应的具体的字节码指令集,这里提供两种方式供参考. 一.使用javap命令      javap是JDK提供的 ...

  6. 如何获取图片的base64编码

    1.准备一张图片,比如1.gif 2.使用chrome浏览器,新建立一个窗口,然后将a.png拖动至浏览器窗口里面,打开控制台(检查),最后点击source 3.使用方法: 注意source获取的一串 ...

  7. js/nodejs导入Excel相关

    导入示例如下: Excel可设置单元格的数字显示格式,特别的,常规格式下,会根据列宽缩进显示. 实际中,有时需要导入实际值,有时需要导入显示值. 而B2的显示值,由于跟列宽相关,目前未找到任何软件,可 ...

  8. 关于通过ip或者域名直接访问工程的问题

    1. 上篇文章 在无界面centos7上部署jdk和tomcat 里介绍了在阿里服务器上部署javaweb工程,在部署完成后,我们需要通过 ip/域名:端口 的方式访问tomcat,但是在实际项目中, ...

  9. Tensorflow揭秘

    https://www.bilibili.com/video/av64970827/?p=7 tf2.0主要使用tf.keras api来构建模型,主要包括如下几个部分 一.Layers 如下是一些特 ...

  10. SpringCloude学习脑图

    SpringCloude学习脑图 http://naotu.baidu.com/file/3e619862813ac331c5d9806486771b42?token=1a7206b777280c6b