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 获取字符串字符个数,遍历字符串每一个字符

          

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐