Linux Shell编程_Genven_Liang的博客-程序员秘密

技术标签: Linux  Linux Shell编程  

Linux Shell编程

一、简述

      简单的介绍shell脚本的基本用法。

     shell脚本是 由一些按照一定格式组合起来的shell命令 组成。shell脚本不需要编译就可以直接执行,它是边解释边执行的。

二、命令解释器

       Linux系统提供多种不同的Shell以供选择。常用的有Bourne Shell(简称sh)、C-Shelll(简称csh)、Korn Shell(简称ksh)和Bourne Again Shell (简称bash)。

       查看当前系统使用的shell默认解释器:echo $SHELL

      

三、脚本格式

        脚本的第一行:

#!/bin/bash

         这句话的意思是指定一款在/bin/下名字叫 bash 的 Shell 解释器,来解释脚本中的命令。如果系统用的是其他的解释器,就要将/bin/bash 改成相应的名字。

       如一个简单的脚本:hello.sh     (在终端打印"hello shell",并且将hello.sh文件的内容打印出来)

      

     注:1)如果没有执行权限的需要添加执行权限,chmod a+x xxx.sh    (表示所有用户都添加执行权限)

             2)除了第一行,后面的'#'号就是注释符,'#'号后面的就是注释内容,会被解释器忽略。

       注:也可以在执行时指定解释器

        

四、变量

       Shell 脚本是一种弱类型语言,在脚本当中使用变量不需要也无法指定变量的“类型”。 缺省状态下,Shell 脚本的变量都是字符串。

      4.1 变量的定义和赋值

             变量名=变量值          (等号两边不能有空格)

            myname="liang"         ( 可以不赋初值:myname=)

     4.2 变量的引用

           在变量名前面加上一个美元符号'$'

           $myname            (引用myname变量的值)

                如:定义一个变量myname并赋初值,然后打印myname变量的值。再从键盘输入一个名字,再打印出来。

                 var.sh 内容:

                 

                执行结果:

                

     注:不用预先定义变量,可以直接使用变量,用的时候也是定义。

      4.3  变量的种类

      a)   普通的用户自定义变量,比如上面的 myname。

      b)   系统预定义好的环境变量,比如 PATH,SHELL(系统默认使用的命令解释器)。

             

             可以使用env (environment环境)命令查看系统的环境变量。

             

      c)   命令行变量,比如$#、$*等 。

变量名 含义
$# 表示位置参数的数量 
$* 表示所有位置参数的内容 
$? 表示命令执行后返回的状态,用于检查上一个命令的执行是否正确;在Linux中,命令退出状态为0表示命令正确执行,任何非0值表示命令执行错误
$$ 表示当前进程的进程号
$! 表示后台运行的最后一个进程号 
$0 表示当前执行的进程名
$1 表示命令行的第一个参数,(就是在执行脚本的时候传递的参数:./xxx.sh arg1 arg2 ......)

                  例子代码:

                                   

                  运行结果:

                

五、双引号、单引号、反引号的作用

        5.1 双引号:将一连串的字符括起来成为一个"值"。

            在定义变量的时候,如只有一个单词,可以不用加双引号。

             

             

            如果字符串中多个单词(含有空格,tab制表等特殊符号)时,就需要用双引号括起来,以准确的将整个一个字符串赋值给变量。

            

            

      5.2 反引号(是波浪号~那个按键):将反引号括起来的内容作为一个命令,然后执行并将结果替换到当前位置。

              

              

      5.3 单引号:将括起来的内容全部当做是普通字符。

             

             
六、数组           

        6.1  数组的定义

              

              

        6.2 输出全部数组元素

              

              

七、for循环

        7.1 for循环的简单使用

              

             

         7.2 使用for循环对数组元素进行遍历

             

             

             或者是:

             

         7.3 使用for循环对数组元素进行逐个赋值

             

             

             

         7.4 另一种形式的for循环

          

八、if语句

        8.1 输入一个数,如果大于10,就打印more,等于10就打印equal,否则打印less。

                

                

                或者是使用test

               

               

  8.2  输入一个字符串如果是"apple",就打印tree;否则打印输入的字符串。     

                

                

九、test语句:

            

语句

含义

说明

test -e file

判断文件 file 是否存在

存在返回 0,否则返回 1

test -r file

判断文件 file 是否可读

可读返回 0,否则返回 1

test -w file

判断文件 file 是否可写

可写返回 0,否则返回 1

test -x file

判断文件 file 是否可执行

可执行返回 0,否则返回 1

test -d file

判断文件 file 是否是目录

是目录返回 0,否则返回 1

test -f file

判断文件 file 是否是普通文件

是普通文件返回 0,否则返回 1

test -s file

判断文件 file 是否非空

非空返回 0,否则返回 1

test s1 = s2

判断字符串 s1 和 s2 是否相同

相同返回 0,否则返回 1

test s1 != s2

判断字符串 s1 和 s2 是否不同

不同返回 0,否则返回 1

test s1 < s2

判断字符串 s1 是否小于 s2

s1 小于 s2 返回 0,否则返回 1

test s1 > s2

判断字符串 s1 是否大于 s2

s1 大于 s2 返回 0,否则返回 1

test -n s

判断字符串 s 长度是否为非 0

s 长度为非 0 返回 0,否则返回 1

test -z s

判断字符串 s 长度是否为 0

s 长度为 0 返回 0,否则返回 1

test n1 -eq n2

判断数值 n1 是否等于 n2

n1 等于 n2 返回 0,否则返回 1

test n1 -ne n2

判断数值 n1 是否不等于 n2

n1 不等于 n2 返回 0,否则返回 1

test n1 -gt n2

判断数值 n1 是否大于 n2

n1 大于 n2 返回 0,否则返回 1

test n1 -ge n2

判断数值 n1 是否大于等于 n2

n1 大于等于 n2 返回 0,否则返回 1

test n1 -lt n2

判断数值 n1 是否小于 n2

n1 小于 n2 返回 0,否则返回 1

test n1 -le n2

判断数值 n1 是否小于等于 n2

n1 小于等于 n2 返回 0,否则返回 1

     

九、case语句

       9.1 输入一个字母,是A就打印"90~100", 是B就打印"70~89", 是C就打印"60~69",是D就打印"<60",其它就打印"again"。

               

               

     注:通配*不带双引号,需要时请放到最后。

十、while循环

       10.1 打印1到10

              

              

              

       10.2 将1累加到10

               

               

注: 死循环, 可以使用break跳出循环

#!/bin/bash

while true
do
    echo "while ..."
    sleep 1
	#break	#跳出循环
done

十一、until语句

          11.1  打印1到10

               

               

十二、休眠/延时

           sleep xxx                 (xxx是秒数)

十三、函数

            13.1 函数的定义与简单的使用

                

                

十四、一些例子

          14.1 判断文件是否存在            

#!/bin/bash

file1="123.txt"
file2="test.sh"
if [ -f "$file1" ]
then
	echo "$file1 is a file"
else
	echo "$file1 is not a file"
fi

if [ -f "$file2" ]
then
	echo "$file2 is a file"
else
	echo "$file2 is not a file"
fi

          14.2 判断目录是否存在

            

          14.3 获取字符串字符个数,遍历字符串每一个字符

          

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/nanfeibuyi/article/details/92400242

智能推荐

git常用命令错误failed to push some refs to ‘xxxx‘_小杨同学的技术成长之路的博客-程序员秘密

error: failed to push some refs to 'https://github.com/ZJyoung1997/JZShop.git'hint: Updates were rejected because the remote contains work that you dohint: not have locally. This is usually caused by another repository pushinghint: to the same ref. You

一年读100本书---HHR,NZJ---19年最后4个月_weixin_30641465的博客-程序员秘密

那些自律到极致的人,都拥有了开挂的人生。19年最后一个季度的HHR计划:补充:每周:以太一周2课;混沌一周一课;推荐算法hold on(实战+课程《36式》),书籍(2周一本)每周完成率:100% -&gt; SSQ概率---------------------王兴,张一鸣,埃隆马斯克,极度在意自己的时间分配和效率---------------第1周---...

Long-term TCP sessions & MPTCP - fter several hours or days the MPTCP stops working_ztguang的博客-程序员秘密

Long-term TCP sessions & MPTCP - fter several hours or days the MPTCP stops working

Jupyter Notebook读取csv文件出现的问题_jupyter notebook找不到csv文件_龙雀刀灵的博客-程序员秘密

Jupyter Notebook读取csv文件失败IndentationError: expected an indented block缩进错误,在报错代码块前加一个空格。在data前加一个空格。2.No such file or directory: ‘weatherdata.csv’找不到文件,我的weatherdata.csv文件放在D盘文件夹里,在文件名前加上文件位置路径。3.SyntaxError: invalid syntax多打了或者缺了某个符号。多了一个冒号,

spring入门(12)-spring与hibernate整合完成增删改查的操作(继承HibernateDaoSupport调用hibernateTemplate类)_judyge的博客-程序员秘密

本文是在上一篇博文的基础之上,通过继承HibernateDaoSupport调用hibernateTemplate类,只要将UserDaoImpl.java改为继承HibernateDaoSupport类,还有spring-dao.xml文件加入对HibernateDaoSupport的配置bean即可,具体实现源码如下:UserDaoImpl.java[java] view

java后台html转jpg图片工具类及测试类_itext html转jpg_cnn0314的博客-程序员秘密

1.图片转文字工具类package com.hecross.common.util;import java.awt.Color;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.i

随便推点

巴菲特致股东的一封信:2013年_阿饭同学的博客-程序员秘密

“像做生意一样对待投资,是最聪明的。”--本•格雷厄姆,《聪明的投资者》

python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: No such file or directory_Lee-Fee的博客-程序员秘密

[email protected]:~$ cd [email protected]:~/caffe$ sudo make pycaffe -j8[sudo] password for ubuntu:touch python/caffe/proto/__init__.pyCXX/LD -o python/caffe/_caffe.so python/caffe/_caffe...

Qt应用程序开发五:QMediaPlayer播放视频,提取视频帧,多窗口播放同一视频_xzpblog的博客-程序员秘密

效果图:方法一:QMediaPlayer+QVideoWidget (如果其他格式视频播放不出来,安装一个视频解码器可以解决)#include &quot;QMutPlayer.h&quot;#include &quot;ui_QMutPlayer.h&quot;#include&amp;lt;QFileDialog&amp;gt;#include&amp;lt;QDebug&amp;gt;QMutPlayer::QMutPlayer(QWid...

如何让苹果手机H5横向滚动条不显示_苹果h5 滚动条可以去掉吗_vieber的博客-程序员秘密

在ios上我们H5有时候会有横向滚动的样式,但是横向滚动有时候不好看,我们需要禁止掉他们。设置-webkit-scrollbar高度为0即可 &amp;::-webkit-scrollbar { height: 0; }参考文章::-webkit-scrollbar

苹果CMS采集工具_苹果cms官方资源采集_小蚂SEO的博客-程序员秘密

苹果CMS采集,是苹果CMS影视站必不可少的功能。现在很多站长想做一个自己的影视站点,感觉影视站点的流量很大,关键词多,做起来会非常容易,的确是这样。这篇文章主要是给大家分享一下关于影视站以及苹果CMS采集的,下面会跟大家讲解到,根据一位多年经验的老站长,给出了新手以下经验,新手做影视站点的一定要看哦!现在看电影、电视剧的人实在是太多了,应该是所有人共同的兴趣爱好吧,但如果说做项目的话,在互联网上要论影视流量的话,它拍第二就没有哪个敢排第一的了,做互联网的人应该都知道。

开源 免费 java CMS - FreeCMS1.5 标签 guestbookPage_freecms1.5 漏洞_vkqiang的博客-程序员秘密

下载地址:http://code.google.com/p/freecms/   1.1.guestbookPage从FreeCMS 1.5 开始支持根据参数分页提取留言列表。 参数 说明 num 每页显示数量 siteid 站点id state

推荐文章

热门文章

相关标签