一、变量

1、linux大小写敏感,变量取名要注意大小写。可以通过变量名前面加$来访问变量的内容。可以通过使用read命令来将用户输入的值赋给一个变量。

2、给变量赋值时,如果字符串中包含空格,就必须用引号把他们引起了,还要注意在等号两边不能有空格。

3、变量在双引号中会用变量值替换,而在单引号中就不会替换,也可以通过转义字符\来取消$的特殊含义。

例:myvar=“Hi there!”

echo $myvar

echo "$myvar"

echo ' $myvar'

echo \$myvar

将会输出如下:Hi there!

Hi there!

$myvar

$myvar

4、环境变量:环境变量通常用大写字母做名字,为了与环境变量区别开来,用户自定义变量一般都用小写字母。

常用的环境变量有:

二、控制结构

1、shell的布尔判断命令[或test。test的三种条件类型:字符串比较、算术比较和文件有关的条件测试。

2、控制结构

Ø if语句:

if  condition

then

statements

else

Statements

Fi

例:#!/bin/sh

if [ -f /root/cherie_test/test_path.sh ];then

echo "/root/cherie_test/test_path.sh exists"

fi

if [ -d /root/cherie_test/test_path.sh ];then

echo "/root/cherie_test/test_path.sh is a director"

else

echo "/root/cherie_test/test_path.sh  is not a directory"

fi

解析:[ ]前后都要有空格,不然会报[: missing `]'错误;if与[之间也需要有空格,没有的话会报syntax error near unexpected token `then'错误。

Ø  elif语句。对if语句的进一步测试。

例:#!/bin/sh

echo "Is it morning? Please answer yes or no "

read timeofday

if[ $timeofday = "yes"]; then

echo "Good morning"

exit 0

elif [ $timeofday = "no" ];then

echo "Good afternoon"

exit 0

else

echo "Sorry,$timeofday not recognized. Enter yes or no "

exit 1 //异常退出

fi

解析:elif会对在第一个if条件不满足的情况下进行进一步测试,如果两次测试的结果都不成功,就打印出一条错误信息并以1为退出码退出。

Ø  for 语句。语法格式:for variable invalues

do

Statements

done

例:#!/bin/sh

for file in $(ls f*.sh); do

lpr $file

done

exit0

解析:打印当前目录中所有以字母f开头的脚本文件。for的参数来着$()中的命令的输出结果,shell扩展f*.sh给出所有匹配此模式的文件的名字。此例中可能会报错lpr: error - scheduler not responding!这是vim配置问题。

Ø while 语句。语法格式: while condition do

Statements

Done

例:#!/bin/sh

foo=1

whlie [ "$foo" -le 20 ]

do

echo "Here we go again"

foo=$(($foo+1))

done

exit 0

解析:测试foo的值,如果它小于20就执行循环体,-le表示小于。

算表达式的使用: count=1

count=$[${count} + 1] 变量加1

Ø until语句。语法格式:until condition

do

Statements

Done

它与while循环很相似,只是把条件测试反过来,循环将执行直达条件为真为止,而不是条件为真时反复执行。

Ø case 语句。语法格式case variable in

pattern statements;;

pattern statements;;

...

esac

注意,每个模式行都以双分号结尾。

例:#!/bin/sh

echo "Is it morning?Please answer yes or no"

read timeofday

case "$timeofday" in

yes|y|Yes|YES)

echo "Good morning"

echo  "Up bright and early this morning"

;;

n*|N*) echo "Good afternoon";;

*)   echo "Sorry ,answer not recognized";;

esac

exit 0

解析:case语句被执行时,会把timeofday的内容与各个字符串依次进行比较。一旦某个字符串输入匹配成功,case命令就会执行紧随右括号后面的代码。case命令会对用来做比较的字符串就行正常的通配符扩展,因此可以指定字符串的一部分在其后加上*通配符,如n*;只使用一个单独的*表示匹配任何可能的字符串。

三、函数

1、函数的定义。我们只需简单的写出它的名字,然后是一对空括号,再把有关的语句放在一对花括号中,如:function_name () {

Statements

}

例:#!/bin./sh

foo () {

echo "Function foo is executing"

}

echo"script starting"

foo

echo "script ended"

exit 0

运行结果如下: script starting

Function foo is executing

script ended

解析:当遇到foo()结构时,它知道定义了一个名为foo的函数。当执行到foo行时,shell就知道应该去执行刚才定义的函数。

注:在调用一个函数之前必须先对它进行定义。

四、命令

Ø break 命令。终止循环

Ø :命令。冒号(:)命令是一个空命令。它偶尔会被用于简化条件逻辑,相当于true的一个别名。由于它是内置命令,所以它运行的比true快,但它的输出可读性较差。

Ø continue命令。使for、while或until循环跳到下一次循环继续执行。continue可以带一个可选的参数以表示希望继续执行的循环嵌套层数,也就是说你可以部分的跳出嵌套循环。

Ø .命令。点(.)命令用来执行当前shell中的命令。

Ø  echo命令。使用echo命令来输出结尾带有换行符的字符串。 常用 echo -n来去掉换行符。

Ø eval命令。eval命令允许你对参数进行求值,有点像一个额外的$。

Ø exec命令。将当前shell替换为一个不同的程序,脚本程序中exec命令后面的代码都不会执行。

Ø exit n命令。exit命令使脚本程序以退出码n结束运行。,退出码0表示成功,退出码1~125是脚本程序使用的错误代码。

Ø export命令。export命令将作为它参数的变量导出到子shell中,并使之在子shell中有效。在默认情况下,在一个shell中被创建的变量在这个shell调用的下级(子)shell中是不可用的。export命令把自己的参数创建为一个环境变量,而这个环境变量可以被其他脚本和当前程序调用的程序看见。

例:脚本export 2

脚本export1

第一个空行的出现是因为变量foo在export2中不可用,所以$foo被赋值为空,echo一个空变量将输出一个空行。Bar用export声明后在export1中仍然有效。

Ø expr命令。expr命令将它的参数当作一个表达式来求值。

Ø printf命令。语法:printf “format string” paremeter1 paremeter2

它支持的转义序列:

Ø return命令。return命令的作用是使函数返回。

Ø set命令。set命令的作用是为shell设置参数变量。还可以通过set命令和它的参数来控制shell的执行方式。其中最常用的命令格式是set -x,它让一个脚本程序跟踪显示它当前执行的命令。

Ø shift命令。shift命令把所有参数变量左移一个位置,使$2变成$1,$3变成$2,依此类推。

Ø trap命令。用于指定在接收到信号后将要采取的行动。trap命令的参数分为两部分,前一部分是接收到指定信号时将要采取的行动,后一部分是要处理的信号名,trap command signal。

Ø unset命令。unset命令的作用是从环境中删除变量或函数。

Ø find 命令。查找文件的功能。语法格式:find [path] [option] [tests] [actions]

一些常用的选项:

测试部分,可以提供给find命令的测试非常多,每种测试返回的结果有两种可能:true或false。find命令开始工作时,它按照顺序将定义的每种测试依次应用到它搜索到的每个文件上。

我们还可以用操作符来组合测试。大多数操作符有两种格式:短格式和长格式,

常见的动作:

Ø grep命令。使用grep命令在文件中搜索字符串。grep语法格式:grep[option] pattern [FILES] 如果没有文件名,则搜索标准输入。

grep命令的一些主要选项:

五、正则表达式

特殊字符:

如果你想将上述字符用作普通字符,就需要在它们前面加上\字符。所以,如果你想使用$字符,只需要简单的将它写为\$。

在方括号中还可以使用一些有用的特殊匹配模式,

匹配字符:

跟踪脚本程序中复杂错误的主要方法是设置各种shell选项。为了完成这一任务,你可以在调用shell时加上命令行选项,各种shell选项:

shell语法基础的更多相关文章

  1. shell脚本语法基础汇总

    shell脚本语法基础汇总 将命令的输出读入一个变量中,可以将它放入双引号中,即可保留空格和换行符(\n) out=$(cat text.txt) 输出1 2 3 out="$(cat te ...

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

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  3. Groovy语言学习--语法基础(4)

    语法基础到此就结束了,毕竟其和Java许多地方并无差别.groovy作为脚本,是为了能更好地随业务变化调整规则,我根据自己对规则的理解 通过一张图简单描述一个groovy脚本场景:由于货币膨胀,经济收 ...

  4. Ruby语法基础(三)

    Ruby语法基础(三) ​ 在前面快速入之后,这次加深对基本概念的理解. 字符串 ​ Ruby字符串可以分为单引号字符串和双引号字符串,单引号字符串效率更高,但双引号的支持转义和运行 puts '单引 ...

  5. Ruby语法基础(一)

    Ruby语法基础(一) Ruby是一种开源的面向对象程序设计的服务器端脚本语言,最初由松本行弘(Matz)设计开发,追求『快乐和生产力』,程序员友好型,被称为『human-oriented langu ...

  6. 【转】Shell编程基础篇-下

    [转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...

  7. 【转】Shell编程基础篇-上

    [转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...

  8. (数据分析)第02章 Python语法基础,IPython和Jupyter Notebooks.md

    第2章 Python语法基础,IPython和Jupyter Notebooks 当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少.这部分上是一个鸡和蛋的问题: ...

  9. shell编程基础(转载)

    Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...

随机推荐

  1. TCP连接(Time_Wait、Close_Wait)说明

    修改Time_Wait和CLOSE_WAIT时间 修改Time_Wait参数的方法 (在服务端修改)Windows下在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlS ...

  2. Visual Studio 2015 和 Apache Cordova

    英文原版:http://www.codeproject.com/Articles/860150/Visual-Studio-and-Apache-Cordova 在开始前,问一下自己下面这些问题: 熟 ...

  3. mysql中自己定义函数编程

    语法: 新建: Create function function_name(參数列表)returns返回值类型 函数体 函数名,应该合法的标识符,而且不应该与已有的keyword冲突. 一个函数应该属 ...

  4. [vba]excel中求选中数据和为给定数所有的组合

    昨天下午开始学习的vba,累死了,肯定有bug,待调试 vba程序如下: Dim aSum As Integer Dim tSum As Integer ) As Integer Dim arrMax ...

  5. C++删除字符串中特定的字符

    原文:https://snipt.net/aolin/c-6/ //处理string类型的方法del_sp(string &str)待测试 //处理C-Style的方法可用,可以考虑将该方法改 ...

  6. Java再学习——Executor,ExecutorService,ScheduledExecutorService与Executors

    1,Executor.ExecutorService和ScheduledExecutorService,它们都是接口,它们的关系是ScheduledExecutorService继承ExecutorS ...

  7. mysql ERROR1405 access deny 问题解决

    sudo /usr/local/mysql/bin/mysqld_safe --user=mysql --skip-grant-tables --skip-networking 使用这条命令可以跳过开 ...

  8. 对《[Unity官方实例教程 秘密行动] Unity官方教程《秘密行动》(十二) 角色移动》的一些笔记和个人补充,解决角色在地形上移动时穿透问题。

    这里素材全是网上找的. 教程看这里: [Unity官方实例教程 秘密行动] Unity官方教程<秘密行动>(九) 角色初始设定 一.模型设置: 1.首先设置模型的动作无限循环. 不设置的话 ...

  9. java如何判断字符串是否为空的方法

    以下是java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s)); 方法二: ...

  10. 【阿里云产品公测】云引擎ACE -discuz安装

    作者:阿里云用户云想未来 谢谢支持.为什么写的比较简单就是为方便新手谁想要很麻烦?亲测按这个教程可以安装成功!时间紧迫不发图片了纯原创 排版您请谅解 进入创建新应用的信息填写界面,此处需要填写一个赠送 ...