SHELL 的语法

n  变量:字符串,数字,环境和参数

n  条件:shell中的布尔值

n  程序控制:if, elif, for, while until, case

n  命令列表

n  函数

n  shell 内置命令

n  获取命令执行结果

n  here文档

变量

变量不需要事先为它声明。默认情况下所有的变量都被看作字符串来存储。

区分大小写

名字前加$字符提取变量

如果字符串包含空格,必须用引号把他们括起来。等号两边不能有空格。

可以用read命令将用户的输入赋给一个变量。

使用引号

脚本参数以空白符分隔(空格,制表,换行)。如果参数中有空白符,必须加上引号

如果$变量在双引号中,会取其值。如果单引号不会发生替换。

环境变量
$HOME, $PATH $PS1 命令提示符,通常是$. $PS2,二级提示符通常是>字符。
$IFS 输入域分隔符。 $S0 脚本的名字。$#传递给脚本的参数个数。
$$脚本的进程号

参数变量

$1,$2,... 脚本程序的参数

$* 所有参数,用IFS分隔。 $@,
一中变体,不使用IFS分隔

条件 test 或 [

if test -f fred.c

then

...

fi

if [ -f red.c]

then

...

fi

字符串比较

string1 = string2

string1 != string2

-n string 如果字符串不为空则结果为真

-z string 如果字符串为null 则结果为真

算术比较

expression1 -eq expression2 相等

expression1 -ne expression2

expression1 -gt expression2 大于

expression1 -ge expression2 大于等于

expression1 -lt expression2 小于

expression1 -le expression2 小于等于

!expression 取反

文件测试

-d file 文件是目录为真

-e file 文件存在
通常使用-f

-f file 普通文件

-g file set-group-id 被设置

-r file 可读

-s file 大小不为0

-u file set-user-id 被设置

-w file 可写

-x file 可执行

控制结构

if 语境

if condition

then

satements

else

statements

fi

if condition

then

satements

else

statements

elif condition; then

statements

then

statements

fi

For 语句

for variable in values

do

statements

done

for与通配符联合使用

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

lpr $file

done

请记住,shell脚本程序中所有的变量扩展都是在脚本程序执行时被执行的,而不是在编写时完成对。所以变量中的语法错误只有在执行时才会被发现。

while 语句

while condition do

statements

done

whle ["$trythis" != "secret" ]; do

echo
"sorry, try again"

read trythis

done

until 语句

until condition

do

statements

done

until who | grep "$1" > /dev/null

do

sleep 60

done

你设置一个报警,当某个特定用户登录,该报警就会启动。

case 语句

case variable in

patten [ |
patten] ...) statements;;

patten [ |
patten] ...) statements;;

...

esac

#! /bin/sh

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

read timeofday

case "$timeofday" in

yes ) echo
"Good morning";;

no ) echo "Good
Afternoon";;

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

esac

exit 0

case "$timeofday" in

yes | y | YES
| Yes ) echo "Good morning";;

no | n* | N*
) echo "Good Afternoon";;

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

esac

And 列表

statement1 && statement2 &&
statement3&& ...

Or 列表

statement1 || statement2 || statement3 || ...

语句块

{}

函数

function_name(){

statements

}

命令

break;

: 空命令。偶尔被用于简化条件逻辑,相当于true的一个别名。while : 无限循环

也会用于条件设置中 : ${var := value}

continue

(.)命令用于在当前shell 中执行命令

. ./shell_script

eval 命令
运行你对参数进行求值

exec 命令
有两种不同的用法,典型的用法是将当前shell替换为一个不同的程序。

exec wall "Thanks for all the fish"

exec 第二种用法,修改当前文件描述符

exec 3 < afile。 使文件描述符3被打开,以便从afile 读取数据

exit n

126 文件不可执行

127 命令未找到

128 以上 出现一个信号。

export 命令

export 将作为它的参数的变量到处到子shell中。
并使之在子shell中有效。默认情况下在shell中创建的变量在这个shell调用的下级(子)shell中是不可用的。

set -a 或 set -allexport 命令将导出它之后声明的所有变量。

expr命令

将它的参数当作一个表达式求值。

x = 'expr $x + 1'

x = $(expr $x + 1)

表达式求值

expr1 | expr2 expr1非0 则等于expr1 ,否则expr2

expr1 & expr2 有一个表达式为0则0,否则等于expr1

expr1 = expr2 等于

expr1 > expr2 大于

>  >=  < 
<=  !=  + 
-  *  /  %

Set 命令
为shell设置参数变量

Shift 命令
把所有参数变量左移一个位置

trap 命令
指定接收到信号后将要采取的行动。

unset 命令,
从环境中删除变量或函数

find grep

shell 的语法的更多相关文章

  1. Shell函数语法

    Shell函数语法 定义函数: function   函数名(){ 指令... } 调用函数,方法1: 函数名 调用函数,方法2: 函数名  参数一   参数二 return在函数里面使用会跳出函数并 ...

  2. shell脚本语法基础汇总

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

  3. 运维shell全部语法进阶

    Linux运维之shell脚本进阶篇 一.if语句的使用 1)语法规则 1 2 3 4 5 6 7 8 9 if [条件]     then         指令 fi 或 if [条件];then ...

  4. U-Boot shell脚本语法

    /********************************************************************** * U-Boot shell脚本语法 * 说明: * 之 ...

  5. (转)shlex — 解析 Shell 风格语法

    原文:https://pythoncaff.com/docs/pymotw/shlex-parse-shell-style-syntaxes/171 这是一篇协同翻译的文章,你可以点击『我来翻译』按钮 ...

  6. shell 基础语法

    shell 基础语法 =============================================== 推荐:http://c.biancheng.net/cpp/shell/ ==== ...

  7. Shell脚本语法---在Makefile等文件…

    1. Shell脚本语法 1.1. 条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Sta ...

  8. Shell的语法

    Shell的语法: 变量:字符串.数字.环境和参数: 条件:shell中的布尔值: 程序控制:if.elif.for.while.until.case: 命令列表: 函数: Shell内置命令: 获取 ...

  9. shell基本语法备忘

    1.第一行要写明shell种类 #!/bin/bash   2.打印输出 #!/bin/bashecho "Hello World !~"   3.变量定义 变量=前后不能有空格, ...

随机推荐

  1. (转)ubuntu 14.04下安装hadoop2.6(伪分布式)

    安装: http://pingax.com/install-hadoop2-6-0-on-ubuntu/   写的非常好(国外人比较实在,他说的单机实际上是伪分布式...). 另外要注意的是,如果对新 ...

  2. POJ2284 That Nice Euler Circuit (欧拉公式)(计算几何 线段相交问题)

                                                          That Nice Euler Circuit Time Limit: 3000MS   M ...

  3. HDU-1011 Starship Troopers (树形DP+分组背包)

    题目大意:给一棵有根带点权树,并且给出容量.求在不超过容量下的最大权值.前提是选完父节点才能选子节点. 题目分析:树上的分组背包. ps:特判m为0时的情况. 代码如下: # include<i ...

  4. Python学习(3)——if语句

    虽然在之前接触过C.C++.Java等,但是还是觉得Python写出来的好看o(≧v≦)o~,简洁明了! score = raw_input("score:") score=int ...

  5. c语言开发手机通讯录

    // //  main.c //  手机通讯录 // //  Created by Kevin-Dfg on 16/4/19. //  Copyright © 2016年 Kevin-Dfg. All ...

  6. C++@类的静态成员变量和静态成员函数

    参考: http://blog.csdn.net/morewindows/article/details/6721430 http://www.cnblogs.com/lzjsky/archive/2 ...

  7. JVM ,JIT ,GC RUNTIME 解析

    Java Class字节码知识点回顾 https://yq.aliyun.com/articles/2358?spm=5176.8067842.tagmain.105.fQdvH3 JVM Class ...

  8. MySQL 用户与授权管理详解

    大纲 一.前言 二.创建用户并授权 三.GRANT语句的种类 四.撤权并删除用户 一.前言 做为Mysql数据库管理员管理用户账户,是一件很重要的事,指出哪个用户可以连接服务器,从哪里连接,连接后能做 ...

  9. Understanding virtualxid && transactionid

    对pg_locks视图中的virtualxid和transactionid字段感到困惑,经查阅资料,特此在此整理一下学习内容: pg_locks Columns Name Type Reference ...

  10. openJudge计算概论-谁考了第k名

    /*===================================== 谁考了第k名 总时间限制: 1000ms 内存限制: 65536kB 描述 在一次考试中,每个学生的成绩都不相同,现知道 ...