shell 的语法
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 的语法的更多相关文章
- Shell函数语法
Shell函数语法 定义函数: function 函数名(){ 指令... } 调用函数,方法1: 函数名 调用函数,方法2: 函数名 参数一 参数二 return在函数里面使用会跳出函数并 ...
- shell脚本语法基础汇总
shell脚本语法基础汇总 将命令的输出读入一个变量中,可以将它放入双引号中,即可保留空格和换行符(\n) out=$(cat text.txt) 输出1 2 3 out="$(cat te ...
- 运维shell全部语法进阶
Linux运维之shell脚本进阶篇 一.if语句的使用 1)语法规则 1 2 3 4 5 6 7 8 9 if [条件] then 指令 fi 或 if [条件];then ...
- U-Boot shell脚本语法
/********************************************************************** * U-Boot shell脚本语法 * 说明: * 之 ...
- (转)shlex — 解析 Shell 风格语法
原文:https://pythoncaff.com/docs/pymotw/shlex-parse-shell-style-syntaxes/171 这是一篇协同翻译的文章,你可以点击『我来翻译』按钮 ...
- shell 基础语法
shell 基础语法 =============================================== 推荐:http://c.biancheng.net/cpp/shell/ ==== ...
- Shell脚本语法---在Makefile等文件…
1. Shell脚本语法 1.1. 条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Sta ...
- Shell的语法
Shell的语法: 变量:字符串.数字.环境和参数: 条件:shell中的布尔值: 程序控制:if.elif.for.while.until.case: 命令列表: 函数: Shell内置命令: 获取 ...
- shell基本语法备忘
1.第一行要写明shell种类 #!/bin/bash 2.打印输出 #!/bin/bashecho "Hello World !~" 3.变量定义 变量=前后不能有空格, ...
随机推荐
- PHP防止页面刷新、重复提交数据
PHP防止页面刷新.重复提交数据 (2011-12-09 16:52:45) 转载▼ 标签: it 分类: php技术相关 闲来无事看了一下php session ,又在网上看了防止页面刷新重复提交数 ...
- 黑马程序员——JAVA基础之简述多线程,两种创建多线程的方式
------- android培训.java培训.期待与您交流! ---------- 多线程: 进程和线程: 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者 ...
- 黑马程序员——JAVA基础之包,权限
------- android培训.java培训.期待与您交流! ---------- 包(package) 对类文件进行分类管理. 给类提供多层命名空间. 写在程序文件的第一行. 类名的全称的是:包 ...
- Fragment用app包还是v4包解析
转自:http://blog.csdn.net/zc0908/article/details/50721553 1)问题简述 相信很多的朋友在调用Fragment都会遇到下面的情况: 这个时候问题来了 ...
- snort-2.9.7.0源码安装过程
2015/02/15,centos6.5-64-minimal,初始205个包 [root@localhost snort]# yum install wget[root@localhost snor ...
- CSS实例:鼠标滑过超级链接文字时改变背景颜色
先讲简单的: 通过CSS可以设置超链接在不同时刻的颜色: <style> a:link {color: #FF0000} /* 未访问的链接 */ a:visited {color: #0 ...
- AngularJS 的安全Apply
$scope.safeApply = function(fn) { var phase = this.$root.$$phase; if (phase == ‘$apply‘ || p ...
- Android中用双缓存技术,加载网络图片
最近在学校参加一个比赛,写的一个Android应用,里面要加载大量的网络图片,可是用传统的方法图片一多就会造成程序出现内存溢出而崩溃.因为自己也在学习中,所以看了很多博客和视频,然后参照这些大神的写源 ...
- tagName和nodeName的区别
首先介绍DOM里常见的三种节点类型(总共有12种,如docment):元素节点,属性节点以及文本节点,例如<h2 class="title">head</h2 ...
- javascript 毫秒转日期 日期时间转毫秒
js毫秒时间转换成日期时间 var oldTime = (new Date("2011/11/11 20:10:10")).getTime(); //得到毫秒数 大多数是用毫秒数除 ...