`

Shell脚本

 
阅读更多
管理整个硬件的是核心(kernel),用户通过shell来与核心沟通,让核心达到我们所想要的目的。

而shell是人类语言与内核直接的桥梁,通过它才能控制内核,进而控制硬件。


linux默认的shell是/bin/bash shell
它的主要功能有:命令记忆、命令补全、命令别名、通配符等。

内部命令和外部命令的区别:

linux命令有内部命令和外部命令之分。内部命令实际上是shell程序的一部分,其中包含的是一些比较简练的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在linux系统

加载运行时shell就被加载并驻留在系统内存中。外部命令是linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以它们包含的程序量也会很大,在系统加载时并不随系统一起被加载

到内存中,而是在需要时才将其调进内存。通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell 程序控制的。shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执


内部命令是指shell中的内置指令。并要需要安装就可以使用,默认情况下bash共有50几个内置命令。
而外部命令与其相反,并不属于shell本身。并不一定有的系统中就有。而且有的可以通过软件包安装得到



shell脚本就是将一些命令汇总起来,一次执行,不需要编译。

脚本的注意事项:

1.如果读取到一个enter(CR),就尝试开始执行该行命令;
2.如果一行内容太多,则可以使用\enter来扩展至下一行;
3.#是行注释;
4.#!/bin/bash,用来声明这个脚本所使用的shell名称,以便在执行该脚本时,加载相关shell的环境设置文件


数值运算可以使用 declare -i total=$no1*$no2 也可以使用
var=$(($no1*$no2))


$? 用于检测上一次命令执行后的状态

为0时,表示true,大于0时表示false

echo $? 可以这样读取


test 命令用于检测文件及相关属性是否存在,返回为真或假

test -e sh01.sh //判断文件名是否存在(如果该文件存在,返回true,不存在返回false)
test -f sh01.sh//判断文件名是否为文件;
test -d sh01.sh//判断是否为目录(如果是目录返回true,如果不存在,或者不是目录则返回false)
test file1 -nt file2 //判断file1是否比file2新,new than
test file1 -ot file2 //判断file1是否比file2旧
test file1 -ef file2//判断是否为同一文件

test str1 = str2 //比较两个字符串是否相等,等号两边要有空格
test str1 != str2 //比较是否不同

test -z string //判断该变量是否设置,若没设置则为true,例如 [ -z "$cxm3" ] cxm3变量没设置,返回true,[ -z "" ]字符串为空,同样返回true

test -n string //这个和上面的相反,没有设置返回false,-n可以省略

使用test的地方,也可以使用[]中括号
例如:[ -e sh01.sh ]
但必须注意,
1)每个组件必须使用空格隔开,且中括号内的变量最好使用双引号来设置
2)中括号比较字符串相等时,要用两个=号,例如:[ "$cxm1" == "$cxm2" ],其实用一个等号也可以,但习惯上两个等号是逻辑判断;
3)中括号内还可以输入多个条件,用-o连接,表示或的意思 [ "$y" = "y" -o "$y" = "Y" ]


可以在脚本后面直接加参数,它们的对应关系是这样:

/etc/init.d/zxesb start restart stop
         $0         $1($@)     $2    $3

$1可以提取第一个参数的值($1可以用$@替换)


echo -n 参数表示它后面的命令跟在这一行之后显示,不是另起一行显示,例如

echo -n hello
echo world
显示为 hello world



条件判断:

if [] || [];then
 
   echo "OK"

elif []; then
  echo "en"

else
  echo "hao"
fi

注意,条件判断以分号结束



case...esac判断,例如:

case $1 in

  "hello")
        echo "sdfs"
        ;;
  "")
        echo "sdfess"
        ;;
  *) //如果变量内容不是上面所有的内容,就执行下面的语句
    echo "sdfs”

  ;;

esac

上面就是例子
例如:
case "$ans" in
y*|Y*) 表示以y或Y开头
return 0
;;
*)
return 1
;;
esac


脚本中变量的获取,有2种方式:
1.直接获取式(在执行脚本命令时,通过其后面的参数获取,大多数/etc/init.d/程序都是这样);
2.交互式(通过read命令);




定义函数的格式为:
函数名()
{
命令1
. . .
}
或者
函数名(){
命令1
. . .
}
两者方式都可行。如果愿意,可在函数名前加上关键字f u n c t i o n,这取决于使用者。
f u n c t i o n 函数名()
{ ...
}
可以将函数看作是脚本中的一段代码,但是有一个主要区别。执行函数时,它保留当前
shell和内存信息。此外如果执行或调用一个脚本文件中的另一段代码,将创建一个单独的
shell,因而去除所有原脚本中定义的存在变

函数的设置一定要在程序的最前面,这样才能在执行时找到可用的程序段

在函数里面,也可以使用 $1、$2等来引用函数名称后面的变量,例如:
fname 1,这个1就可以通过$1来引用
调用函数时,直接写函数名称不加括号,例如
fname;
即可调用函数



循环有3种

while [] //但条件满足时
do
  程序段
done

until []//但条件不满足是
do
done


for((int=1;i<=100;i=i+1))
do
done

还有一种:
for animal in dog cat elephant
do
  echo "sdfsf"
done
每次循环,aninal分别取dog、cat、elepant等

filelist=`ls $dir'
for filename in $filelist
do

done

例1:
num=0

for((i=0;i<100;i++))
do
num=$((num+i))
#或者 num=$(($num+$i))
done

是数字类型,在计算时可以加$,也可以不加

例2:
Rosetta_path=/home/test/test.txt
if [ -e $Rosetta_path ] ;then //这个地方可以对变量加双引号,也可以不加
mv $Rosetta_path $dirnameBak
Log "[~3.Backuping old file is successful.$Rosetta_path~]"
   else
      Log "[~3.There is no corresponding the file.$Rosetta_path~]"
fi
判断文件是否存在,存在返回true,不存在返回false


例3

判断数值类型是否大于10,大于返回true,小于等于返回false
  if [ $FILENUM -gt 10 ]; then   //这个地方可以对变量加双引号,也可以不加
      Log "[~2.Clear very old files aready.~]"
   else
      Log "[~2.There are no very old files.~]"
   fi

-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于


但建立一个新的文件或目录时,它的默认属性是什么呢?这与umask有关

查看方式有2种:
umask  //以数字方式查看,第一组是特殊权限用的,暂不管他
umask -S//以字符方式查看

在默认权限上,文件和属性是不一样的,文件没有有x权限,目录有x权限


umask以数字方式显示时,表示默认权限需要减掉的权限。当要去掉w时,就输入2;要去掉r权限就输入4;要去掉rw权限就输入6;

如果umask为022
建立文件时:文件所有者为默认权限rw,没有减掉;用户组减掉w权限(默认也是rw);其他用户减掉w权限(默认也是rw);
建立目录时:目录所有者为默认权限rwx;其他和上面一样了,用户组和其他用户默认也是(默认也是rwx)

如果想改变默认的权限,直接在umask后面写上要数字即可,例如:
umask 002
分享到:
评论

相关推荐

    LinuxShell脚本学习基础视频

    资源名称:Linux Shell脚本学习基础视频资源目录:【】11a00d99b60c4e2eba3440b8aa3a6bdd【】linux_shell脚本编程_01认识shell,如何编写shell脚本和执行【】linux_shell脚本编程_02vivim简单的常用操作【】linux_...

    Shell脚本学习教程PDF版

    Shell脚本,作为Linux/Unix系统中的编程工具,是一种强大的自动化任务执行手段。它基于Bourne shell或者其扩展版本,如bash(Bourne-Again SHell),提供了一种编写简单或复杂程序的方式,使得用户能够通过命令行...

    109个shell脚本合集.pdf

    Shell脚本合集 Shell脚本是一种脚本语言,利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能。 Shell脚本可以直接使用在Windows、Unix、Linux上面,并且可以调用大量系统内部的功能来解释...

    IDEA中编写并运行shell脚本的实现

    IDEA中编写并运行shell脚本的实现 IDEA中编写并运行shell脚本的实现是指在Integrated Development Environment(IDE)中编写、配置和运行shell脚本的过程。该过程需要安装bashsupport插件,配置插件,安装git软件,...

    Shell脚本中获取进程ID的方法

    我该如何在shell脚本中得到PID。 当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为“批处理进程”)。 在某些情况下,你也许想要...

    250个shell脚本

    Shell脚本是Linux/Unix操作系统中的强大工具,它允许用户编写一系列命令,形成自动化任务,以提高工作效率。本文档收集了250个实用的Shell脚本实例,涵盖了多个应用场景,包括系统管理、安全防护、数据库备份等核心...

    Shell脚本编程100例

    Shell脚本编程是Linux系统管理中的重要技能,它允许用户自动化执行一系列命令,大大提高工作效率。以下是一些关于Shell脚本编程的关键知识点: 1. **Hello World脚本**:这是所有编程语言的基础,用于验证环境设置...

    shell脚本编程100例

    shell脚本编程100例 Shell脚本编程是一种强大的编程语言,广泛应用于Linux和Unix操作系统中。本书《shell脚本编程100例》为读者提供了100个实战性的shell脚本编程实例,涵盖了检测网段主机状态、猜数字游戏、打印...

    android系统中调用shell脚本

    在Android系统中,由于安全性和权限的限制,直接调用shell脚本并不像在Linux或Unix环境下那样简单。然而,对于非root用户来说,确实有一些方法可以实现对shell脚本的调用,尤其是在开发和调试过程中。下面我们将深入...

    C语言中文网shell脚本教程

    **C语言中文网shell脚本教程** 这是一份关于Shell脚本编程的离线学习资料,包含了一系列HTML文件,旨在帮助用户深入理解并掌握Linux Shell脚本编程技术。以下是其中涉及的一些关键知识点: 1. **Shell命令的本质**...

    shell脚本与Makefile区别.docx

    "shell脚本与Makefile区别" shell 脚本和 Makefile 是两个不同的工具,它们都用于自动化构建和编译过程,但是它们有很大的不同之处。本文将详细介绍 shell 脚本和 Makefile 的区别。 首先,shell 脚本和 Makefile ...

    如何让Android系统或Android应用执行shell脚本

    Android 系统或 Android 应用执行 shell 脚本的方法 Android 系统或 Android 应用执行 shell 脚本是 Android 开发中的一项重要技术,通过执行 shell 脚本,可以实现一些复杂的操作,例如设置网络参数、启动服务等...

    解决Unity不能调用shell脚本传递参数的问题

    ### 解决Unity不能调用shell脚本传递参数的问题 在Unity开发过程中,有时我们需要与操作系统进行交互,例如执行shell脚本来处理一些特定的任务。但在实际操作中,可能会遇到Unity无法正确调用shell脚本并传递参数的...

    Shell脚本实现二维码图片生成

    Shell脚本是Linux系统中的一种强大工具,它允许用户通过编写命令行指令序列来执行自动化任务。在这个场景中,我们讨论的是一个特定的Shell脚本,它的目标是生成二维码图片。在旧有的系统中,如果没有源码可供修改,...

    输出执行操作和打印日志的shell脚本实例

    cat /mnt/log_function.sh #!/bin/bash #log function ####log_correct函数打印正确的输出到日志文件 function log_correct () { DATE=`date “+%Y-%m-%d %H:%M:%S”` ####显示打印日志的时间...log_error打印shell脚本

    Linux-shell脚本全面学习.pdf

    Linux Shell 脚本编程基础知识点总结 Linux 脚本编写基础 1.1 语法基本介绍 * `#!` 符号用来告诉系统它后面的参数是用来执行该文件的程序 * 在 Linux 中,使用 `/bin/sh` 来执行程序 * 编辑好脚本后,需要使其可...

    linux下shell脚本实现数据的导出

    在Linux环境下,shell脚本是自动化任务的强大工具,尤其对于数据导出这样的操作,通过编写shell脚本可以方便地实现定期备份或者按需导出。本文将深入讲解如何使用shell脚本来实现数据的导出,并结合Java代码进行调用...

    Linux 命令与Shell 脚本编程pdf书籍

    《Linux命令行与Shell脚本编程大全》是一本专为Linux初学者编写的经典教材,旨在帮助读者深入理解和掌握Linux操作系统中的基本命令行操作以及Shell脚本编程技术。这本书全面覆盖了从基础到进阶的各种主题,对于想要...

    高级Shell脚本编程.zip

    **高级Shell脚本编程** Shell脚本编程是Linux/Unix系统中的重要技能,它是一种用于自动化任务、管理系统和实现批处理操作的脚本语言。在Linux环境中,Bash(Bourne-Again SHell)是最常用的Shell,它扩展了原始的...

    shell脚本100例(最新版).pdf

    Shell脚本是Linux系统中的一种强大工具,它允许用户通过编写简单的命令行指令组合来实现自动化任务。在《shell脚本100例(最新版).pdf》这本书中,作者详细介绍了各种实用的Shell脚本案例,涵盖了从基础语法到高级...

Global site tag (gtag.js) - Google Analytics