Shell中的变量
 
Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看那系统变量
系统变量:$HOME、$PWD、$SHELL、$USER等等

显示当前shell中所有变量  :    set

 

定义变量

•变量=值 (例如STR=abc)
•等号两侧不能有空格
•变量名称一般习惯为大写
•双引号和单引号有区别,双引号仅将空格脱意,单引号会将所有特殊字符脱意

STR="hello world"

A=9

unset A 撤销变量 A

readonly B=2 声明静态的变量 B=2 ,不能 unset

export 变量名 可把变量提升为全局环境变量,可供其他shell程序使用

将命令的返回值赋给变量
A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
A=$(ls -la) 等价于反引号
 
 
Shell中的特殊变量
•$? 表示上一个命令退出的状态
•$$ 表示当前进程编号
•$0 表示当前脚本名称
•$n 表示n位置的输入参数(n代表数字,n>=1)
•$#  表示参数的个数,常用于循环
•$*和$@ 都表示参数列表 
 
 
 
$*与$@区别
•$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号" "包含时,都以$1  $2  … $n 的形式输出所有参数
•当它们被双引号" "包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数
 
 

运算符

格式 :expr m + n 或$((m+n)) 注意expr运算符间要有空格
例如计算(2 +3 )×4 的值
 
1.分步计算

S=`expr 2 + 3`
  expr $S \* 4

2.一步完成计算

expr `expr 2 + 3 ` \* 4

echo `expr \`expr 2 + 3\` \* 4`

或 $(((2+3)*4))

 
for循环
•第一种:

for N in 1 2 3

do

echo $N

done

for N in 1 2 3; do echo $N; done

for N in {1..3}; do echo $N; done

 
•第二种:

for ((i = 0; i <= 5; i++))

do

echo "welcome $i times"

done

for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done

 
 
while循环
•第一种

while expression

do

command

done

•第二种

i=1

while ((i<=3))

do

echo $i

let i++

done

 
 
case语句
•格式

case $1 in

start)

echo "starting"

;;

stop)

echo "stoping"

;;

*)

echo "Usage: {start|stop} “

esac

 
read命令
 
read -p(提示语句)-n(字符个数) -t(等待时间) 

read -p "please input your name: " NAME

 
if判断
•语法

if condition 
then 
    statements 
[elif condition 
    then statements. ..] 
[else 
    statements ] 
fi

例子

#!/bin/bash

read -p "please input your name:" NAME

#printf '%s\n' $NAME

if [ $NAME = root ]

then

echo "hello ${NAME},  welcome !"

elif [ $NAME = itcast ]

then

echo "hello ${NAME},  welcome !"

else

echo "SB, get out here !"

fi

 
判断语句
•[ condition ] (注意condition前后要有空格)

#非空返回true,可使用$?验证(0为true,>1为false)

[ mike ]

#空返回false

[  ]

l[ condition ] && echo OK || echo notok

条件满足,执行后面的语句

 
常用判断条件

=字符串比较

-lt小于

-le小于等于

-eq等于

-gt大于

-ge大于等于

-ne不等于

 

-r 有读的权限

-w 有写的权限

-x 有执行的权限

-f 文件存在并且是一个常规的文件

-s 文件存在且不为空

-d 文件存在并是一个目录

-b文件存在并且是一个块设备

-L文件存在并且是一个链接

 
 
Shell自定义函数
 
l语法

[ function ] funname [()]

{

action;

[return int;]

}

function start()  / function start / start()

•注意

1.必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译

2.函数返回值,只能通过$? 系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

 
 
脚本调试
 
•sh -vx helloWorld.sh
•或者在脚本中增加set -x

Shell脚本部分语法的更多相关文章

  1. shell脚本启动语法错误syntax error near unexpected token '{

    执行shell脚本时失败,报语法错误,但脚本内容检查正常 原因为该脚本是在非Linux系统下编辑之后放到系统执行的,文件模式类型非Linux系统匹配的模式类型. 查看文件的模式类型 显示文件的模式类型 ...

  2. Linux Shell脚本简单语法汇总(Deepin下运行)

    整理自: https://www.runoob.com/?s=shell Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 业界所说的 shell 通常都是指 sh ...

  3. 运维shell脚本函数语法

    在fun.sh 文件里,使用函数来封装脚本内容 usege() { echo "hello world" echo "脚本怎么使用函数......"}usege ...

  4. shell脚本常用语法详解

    逻辑控制 if 语法:注意空格 a=1b=2if [ $a == $b ]then    echo "a==b"elif [ $a -gt $b ]then    echo &qu ...

  5. shell脚本基础-语法

    一 变量 [root@T_FOOT-Home2-ZZZ01 ~]# a=hello [root@T_FOOT-Home2-ZZZ01 ~]# echo $a hello [root@T_FOOT-Ho ...

  6. Shell 脚本编程 基本语法:

    Shell 脚本编程语法: 注: 文章来源 http://www.cnblogs.com/yunquan/p/6821850.html 视频来源:https://www.bilibili.com/vi ...

  7. shell脚本学习心得

    近来主要捣鼓ubuntu,大多数项目中都用到了sh脚本作为启动脚本等,以前只是大概明白如何使用,今天需要自己修改并运行脚本就碰到了很多问题,所以决定静下心来学习一下shell脚本,学习了几个小时,现将 ...

  8. shell脚本二

    在shell脚本一 中,我讨论了shell脚本的语法规范,shell脚本的变量,以及shell脚本的测试语句. 仅仅懂得这些只能写简单的脚本,在简单的脚本中各条语句按顺序执行,从而实现自动化的管理,顺 ...

  9. 写shell脚本速查笔记

    linux shell脚本的语法蛋疼,而且对于java开发人员来说又不常用,常常是学了一次等到下次用的时候又忘记了.因此制作这个速查笔记,用于要写shell脚本时快速回忆&速查. 获取当前脚本 ...

随机推荐

  1. 聊聊、Integer 封装特性

    前几天在公司内部群,有人分享出了一道题,问谁能口算出来,他就膜拜那个人.题目如下: Class cache = Integer.class.getDeclaredClasses()[0]: Field ...

  2. 三种框架对比react vue 和Angular对比

    https://blog.csdn.net/runOnWay/article/details/80103880 angular 优点 背靠谷歌 使用typescript 便于后端人员开发上手 完整 不 ...

  3. RESTful-rest_framework应用第二篇(get、post的序列化与反序列化)

    目的是: 利用rest_framework实现对数据库内容的查看get请求(序列化).提交保存数据post请求 (反序列化) rest_framework序列化组件(即查看和) 第一步:基于Djang ...

  4. 【bzoj2836】魔法树 树链剖分+线段树

    题目描述 输入 输出 样例输入 4 0 1 1 2 2 3 4 Add 1 3 1 Query 0 Query 1 Query 2 样例输出 3 3 2 题解 树剖+线段树模板题,不过为什么写的人这么 ...

  5. P4555 最长双回文串

    题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为abc,逆序为cba,不相同). 输入长度为 n的串 S ,求 S的最长双回文子串 T ,即可将 ...

  6. 求职之路(拿到百度、美团、趋势科技、华为offer)

    求职之路(拿到百度.美团.趋势科技.华为offer) 版权所有:无缰之马chhuach(CSDN和博客源),转载请注明出处.CSDN地址http://blog.csdn.net/chhuach2005 ...

  7. 超简单(super)

    超简单(super) 题目描述 有一个n面的骰子,第i面的数是vi,朝上的概率是pi. 教室的最后一排有一个人,不停地抛这个骰子,直到某一面朝上了两次,就停止抛骰子,但他不知道所有朝上的面的数字的和的 ...

  8. easyUI 接收Spring Mvc中@ResponseBody中文乱码解决

    接触springMVC不够深入,乱码困扰我到深夜,特此留下记忆: @responsebody默认滴是ISO-8859-1 Controller注解参数 @ResponseBody 标注后返回Strin ...

  9. python获取目录下文件夹名称

    path = '/opt' dirs = os.listdir(path) for dir in dirs: print dir

  10. iOS 代理为啥要用weak修饰?

    在开发中我们经常使用代理,或自己写个代理,而代理属性都用weak(assign)修饰,看过有些开发者用strong(retain),但并没发现有何不妥,也不清楚weak(assign)与strong( ...