首页 > shell 脚本简单入门

shell 脚本简单入门

好久不写shell脚本,有些生疏。总结下shell的语法,以便后续参考,快速捡起来。

  1. shell 脚本执行的3种方式:

    1). ./xx.sh (xx.sh 需要有执行权限)

    2). source xx.sh

    3). bash xx.sh

  2. 变量定义

    var=2 //注意:=左右没有空格

  3. 变量引用的2种方式

    $符号就是变量解引用符号

       $var    ${var}
    
  4. 字符串初始化

       string=hello worldstring="hello world"
    
  5. 单引号、双引号

    单引号中:完全字面替换(不可包含单引号本身)

          1 #!/bin/bash2 3 string="hello world"4 `echo '$string\'
    

    `

    运行:

    ricky@ubuntu:~/code/shell$ ./1.sh
    $string\
    
     双引号中:转义字符/$加变量名可以取变量的值反引号仍表示命令替换$表示$的字面值输出$符号`表示`的字面值"表示"的字面值\表示的字面值1 #!/bin/bash2 string="hello world"3 echo "$string\"
    

    运行:

    ricky@ubuntu:~/code/shell$ ./1.sh
    hello world
    
  6. 调用linux 命令

    1)直接执行 pwd

  1. 用反引号(和~位于同一个按键)括起来
````pwd`
```
  1. 分支

    注意[ 表达式 ]里面表达式前后各有一个空格

    if [ 表达式 ]; then

    xxx

    else

    xxx

    fi

    1).判断文件是否存在 -f

        if [ -f 1.sh ]; thenecho "file exist"elseecho "file does not exist"fi
    

    2). 判断目录是否存在 -d

    	if [ -d `pwd` ]; thenecho "`pwd` exist"elseecho "dir does not exist"fi
    
     //输出:/home/ricky/code/shell exist
    

    3). 判断字符串是否相等: str1 = str2 一个等号,和C语言不一样

          1 #!/bin/bash2 string="hello world"3 4 if [ "$string" = "hello world" ]; then5     echo "the same string"6 else7     echo "dif string"8 fi
    

    4). 数字比较

    相等(-eq)

    大于(-gt)

    小于(-lt)

    大于等于(-ge)

    小于等于(-le)

        1 #!/bin/bash2 3 n=104 5 if [ $n -gt 5 ]; then6     echo "n is grate than 5"7 fi
    

    5). 判断字符串是否为空(-z)

          1 #!/bin/bash2 3 string="hello"4 5 if [ -z $string ]; then6     echo "null string"7 else8     echo "no null string"9 fi
    

    6). 逻辑或(-o) 逻辑与(-a)

          1 #!/bin/bash2 3 string="hello"4 n=105 6 if [ -z $string -o $n -gt 5 ]; then7     echo "null string or n is greate than 5"8 else9     echo "no null string"10 fi
    

    7). if…else…快速写法:用&&或者||表示

    if [ A ]; then

    do B

    fi

    可以用 [ A ] && do B 表示

       1 #!/bin/bash2 3 n=104 5 if [ $n -gt 5 ]; then6     echo "n is great than 5"7 fi8 9 [ $n -gt 5 ] && echo "n is great than 5"
    
  运行
ricky@ubuntu:~/code/shell$ ./1.sh
n is great than 5
n is great than 5
  if [ A ]; thendo Bfi可以用 [ ! A ] || do B 表示```1 #!/bin/bash2 3 n=104 5 if [ $n -gt 5 ]; then6     echo "n is great than 5"7 fi8 9 [ ! $n -gt 5 ] || echo "n is great than 5"

运行:

 	ricky@ubuntu:~/code/shell$ ./1.shn is great than 5n is great than 5

&& 和 || 还可以执行命令

cmd1 && cmd2 :

若cmd1执行完毕且正确执行($?=0),则开始执行cmd2

若cmd1执行完毕且返回出错($?≠0),则不执行cmd2

1 #!/bin/bash 2 3 pwd && ls

运行:

ricky@ubuntu:~/code/shell$ ./1.sh /home/ricky/code/shell 1.sh

   1 #!/bin/bash2 3 ! pwd && ls```运行:```		 ricky@ubuntu:~/code/shell$ ./1.sh/home/ricky/code/shell```cmd1 || cmd2		若cmd1执行完毕且正确执行(`$?=0`),则不执行cmd2若cmd1执行完毕且返回出错(`$?≠0`),则执行cmd2
  1 #!/bin/bash2 3 ! pwd || ls
	运行:ricky@ubuntu:~/code/shell$ ./1.sh/home/ricky/code/shell1.sh
8.  for 循环```1 #!/bin/bash2 3 for i in 1 2 3 44 do5     echo "$i"6 done```输出:12349.  while 循环```1 #!/bin/bash2 3 i=04 while [ $i -le 4 ]5 do6     echo "$i"7     let i++8 done```输出:01234	10. switch case```1 #!/bin/bash2 3 cond="in"4 5 case $cond in6 in) echo "$cond" ;;7 out) echo "out"  ;;8 esac```//注意,和C语言不同,没有break11. 注释多行(:<

更多相关:

  • 毕业之际给学校搭建了基于ATS的正向代理缓存服务器,专门用来处理优酷土豆等在线视频流量。通过改写一个浏览器做成在线视频专用浏览器,内置了ATS的代理设置。 用php配合memcacheq和小脚本实现了简单的异步预热功能,在实际运用中安全性请自行考虑完善。 工作方式:PHP页面提交URL——>memcacheq<——shell脚...

  • 作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=538 前言: “Ping”属于ICMP协议(即“Internet控制报文协议”),而ICMP协议是TCP/IP协议的一个子协议,工作在网际层。ICMP协议主要用于传输网络是否连通、主机是否可达以及路由是否可用等控制信息。Ping可以回显TTL生存...

  • 前言:俗话说的好,懒是第一生产力,懒是提高生产效率的必要条件。而现今windows是大部分人的第一生产工具,批处理+定时任务这对黄金搭档就是提升生产效率的第一工具。大家在生产过程中经常会遇到各种周期性的重复的工作,比如我现在每天都会更换最新的jar包并重启tomcat,linux服务器我们可以用shell+crontab,而windo...

  •   Linux 登陆服务器敲命令太多,某时候确实不便,所以就用shell写了一个  我的blog地址: http://www.cnblogs.com/caoguo   一.说明 支持秘密和密钥两种格式用户名和密码都是写文件的,明文保存二.配置 密码文件配置:序号:IP:端口:用户:密码:说明 1:192.168.88.128:22:...

  • (running Spark in local mode on single computer) 1.参见本博客前面的文章完成以下准备工作: (1)安装JVM (2)安装Scala (3)安装Python或者IPython 2.官网下载Spark最新版并解压 登陆官网 http://spark.apache.or...

  • android/build/core/main.mk $(shell expr $(MAKE_VERSION) >= 3.81) 为什么要加多一个“”,因为">"会被shell解析为重定向符号,所以需要转义或用引号包围 所以,也可以这样写$(shell expr $(MAKE_VERSION) “>=” 3.81) 转载于:h...

  • importjava.security.SecureRandom;importjavax.crypto.Cipher;importjavax.crypto.SecretKey;importjavax.crypto.SecretKeyFactory;importjavax.crypto.spec.DESKeySpec;//结果与DES算...

  • 题目:替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 输入:s = "We are happy." 输出:"We%20are%20happy." 限制: 0 <= s 的长度 <= 10000 解题: 时间复杂度:O(n) 空间复杂度:O(n) class Solution { public:s...

  • 在C++11标准库中,string.h已经添加了to_string方法,方便从其他类型(如整形)快速转换成字面值。 例如: for (size_t i = 0; i < texArrSize; i++)RTX_Shader.SetInt(string("TexArr[") + to_string(i) + "]", 7 + i);...

  • Ubuntu 14.04安装并升级之后,变成楷体字体非常难看,我昨天搞了一晚上,终于理了个头绪,这里整理一下。 经过网上调研,大家的一致看法是,使用开源字体库文泉驿的微黑字体效果比较理想,甚至效果不输windows平台的雅黑字体。下面我打算微黑来美化Ubuntu 14.04. 1.安装文泉驿微黑字体库 sudo aptitude...

  • 使用string时发现了一些坑。 我们知道stl 容器并不是线程安全的,所以在使用它们的过程中往往需要一些同步机制来保证并发场景下的同步更新。 应该踩的坑还是一个不拉的踩了进去,所以还是记录一下吧。 string作为一个容器,随着我们的append 或者 针对string的+ 操作都会让string内部的数据域动态增加,而动态增加的...