发表于: 2022-06-07 19:36:37

1 461



  关于脚本的基本知识点:


一、什么是Shell?

        shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统,

比如Linux中的Shell命令就包括ls、cd、pwd等等。总结来说,Shell是一个命令解释器,

它通过接受用户输入的Shell命令来启动、暂停、停止程序的运行或对计算机进行控制。

二、什么是脚本?

shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。

它通过解释器解释运行,所以速度相对来说比较慢。shell脚本中最重要的就是对shell命令的使用与组合,

再使用shell脚本支持的一些语言特性,完成想要的功能。


Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。


shell脚本----cp (copy)复制文件或目录

功能: 复制文件或目录

说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,

则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息

参数:

-a 或 --archive 此参数的效果和同时指定"-dpR"参数相同

-b 或 --backup 删除、覆盖目的文件先备份,备份的文件或目录亦建立为符号链接,并指向源文件或目录链接的源文件或目录。

假如没有加上这个参数,在复制过程中若遇到符号链接,则会直接复制源文件或目录

-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在

-i 或 --interactive 覆盖文件之前先询问用户

-l 或 --link 对源文件建立硬链接,而非复制文件

-p 或 --preserve 保留源文件或目录的属性,包括所有者、所属组、权限与时间

-P 或 --parents 保留源文件或目录的路径,此路径可以是绝对路径或相对路径,且目的目录必须已经丰在

-r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理

-R 或 --recursive 递归处理,将指定目录下的文件及子目录一并处理

-s 或 --symbolic-link 对源文件建立符号链接,而非复制文件

-S <备份字尾字符串> 或 --suffix=<备份字尾字符串> 用"-b"参数备份目的文件后,备份文件的字尾会被加上一个备份字符串。默认的备份字尾符串是符号"~"

-u 或 --update 使用这项参数之后,只会在源文件的修改时间(Modification Time)较目的文件更新时,或是名称相互对应的目的文件并不存在,才复制文件

-v 或 --verbose 显示执行过程

-V <备份方式> 或 --version-control=<备份方式> 指定当备份文件时,备份文件名的命名方式,有以下3种:

1.numbered或t, 将使用备份编号,会在字尾加上~1~字符串,其数字编号依次递增

2.simple或never 将使用简单备份,默认的备份字尾字符串是~, 也可通过-S来指定

3.existing或nil将使用当前方式,程序会先检查是否存在着备份编号,若有则采用备份编号,若无则采用简单备份

-x 或 --one-file-system 复制的文件或目录存放的文件系统,必须与cp指令执行时所处的文件系统相同,否则不复制,亦不处理位于其他分区的文件

--help 显示在线帮助

--sparse=<使用时机> 设置保存希疏文件的时机

--version 显示版本

示例:

.复制文件,只有源文件较目的文件的修改时间新时,才复制文件

cp -u -v file1 file2

.将文件file1复制成文件file2

cp file1 file2

.采用交互方式将文件file1复制成文件file2

cp -i file1 file2

.将文件file1复制成file2,因为目的文件已经存在,所以指定使用强制复制的模式

cp -f file1 file2

.将目录dir1复制成目录dir2

cp -R file1 file2

.同时将文件file1、file2、file3与目录dir1复制到dir2

   cp -R file1 file2 file3 dir1 dir2

.复制时保留文件属性

cp -p a.txt tmp/

.复制时保留文件的目录结构

cp -P /var/tmp/a.txt ./temp/

.复制时产生备份文件

cp -b a.txt tmp/

.复制时产生备份文件,尾标 ~1~格式

cp -b -V t a.txt /tmp

.指定备份文件尾标

cp -b -S _bak a.txt /tmp




echo命令是dos批处理命令的一条子命令。功能是:打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo命令将显示当前回显设置。


linux的echo命令, 在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的, echo命令的功能是在显示器上显示一段文字,

一般起到一个提示的作用。


中输入命令时,需要注意的是,每一条命令,或者每一组需要一起执行的命令,都因该保存在的单独一行中,以便确保命令的正确执行。


 Shell中的特殊符号

1   $  美元符号。用来表示变量的值。如变量NAME的值为Mike,则使用$NAME就可以得到“Mike”这个值。


2   #  井号。除了做为超级用户的提示符之外,还可以在脚本中做为注释的开头字母,每一行语句中,从#号开始的部分就不执行了。


3  “”  双引号。shell不会将一对双引号之间的文本中的大多数特殊字符进行解释,如#不再是注释的开头,它只表示一个井号“#”。

           但$仍然保持特殊含义。(在双引号中的$加变量名,即:$PARAM_NAME,依然会转换成变量的值。)

3.1     双引号对于某些特殊符号是不起作用的, 例如:”,$,\,`(反引号)

3.2     双引号和单引号不能嵌套。即:echo ‘””’  输出””,  echo “’’” 输出’’


4  ‘’  单引号。shell不会将一对单引号之间的任何字符做特殊解释。(在双引号中的$加变量名,即:$PARAM_NAME,不会转换成变量的值。)

4.1   echo “$HOME”    (结果:/home/xiongguoan)


5  ``  倒引号。命令替换。在倒引号内部的shell命令首先被执行,其结果输出代替用倒引号括起来的文本,不过特殊字符会被shell解释。

5.1     echo ‘$HOME’    (结果:$HOME)


6   \  斜杠。用来去掉在shell解释中字符的特殊含义。在文本中,跟在\后面的一个字符不会被shell特殊解释,但其余的不受影响。


7   []中括号, 主要是用来测试条件的,通常放在if语句的后面。 (不过还是不太明白),但是中括号本身不会在测试语句执行后消失。

7.1     echo [$HOME]   (结果:出现错误)

7.2     echo [$HOME ]   (结果:[/home/xiongguoan ]) (注意:HOME后面有空格哦。)

7.3     echo [$HOME –eq ‘/xiong’]  (结果:[/home/xiongguoan –eq /xiong])

 

8   {}大括号,主要是和$符号配合,作为字符串连接来使用

8.1     echo ${HOME}ismydir   (结果:/home/xiongguoanismydir)



  预定义的变量

   特殊变量

$      shell变量名的开始,如$var

|      管道,将标准输出转到下一个命令的标准输入

$#     记录传递给Shell的自变量个数

#      注释开始

&      在后台执行一个进程

?     匹配一个字符

*      匹配0到多个字符(与DOS不同,可在文件名中间使用,并且含.)

$-     使用set及执行时传递给shell的标志位

$!     最后一个子进程的进程号 

$?     取最近一次命令执行后的退出状态(返回码)

$*     传递给shell script的参数

$@     所有参数,个别的用双引号括起来

$0     当前shell的名字

$n     (n:1-) 位置参数

$$     进程标识号(Process Identifier Number, PID)

>      输出重定向

  <      输入重定向

  >>      输出重定向(追加方式)

  []     列出字符变化范围,如[a-z]



特殊字符的表达

\b 退回  

\c 打印一行时没有换行符 这个我们经常会用到  

\f 换页  

\r 回车  

\t 制表  

\v 垂直制表  

\\ 反斜线本身 



基础的示例:

#!/bin/bash
echo "Hello World !"



执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$nn 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

示例

#!/bin/bash

echo "Shell 传递参数实例!";
       echo "执行的文件名:$0";
       echo "第一个参数为:$1";
       echo "第二个参数为:$2";
       echo "第三个参数为:$3";



变量

Bash 没有数据类型的概念,所有的变量值都是字符串。


环境变量

环境变量是 Bash 环境自带的变量,进入 Shell 时已经定义好了,可以直接使用。它们通常是系统定义好的,可以理解成全局的常量。


常见环境变量种类:

BASHPID: Bash 进程的进程 ID 。

EDITOR:默认的文本编辑器。

HOME:用户的主目录。

HOST:当前主机的名称。

LANG:字符集以及语言编码,比如 zh_CN.UTF-8。

PATH:由冒号分开的目录列表,当输入可执行程序名后,会搜索这个目录列表。

PWD:当前工作目录。

SHELL: Shell 的名字。

TERM:终端类型名,即终端仿真器所用的协议。

UID:当前用户的 ID 编号。

USER:当前用户的用户名。



其他循环控制语句

break 命令不执行当前循环体内break下面的语句从当前循环退出.  

continue 命令是程序在本循体内忽略下面的语句,从循环头开始执行







明天计划:完成接下来的任务。



返回列表 返回列表
评论

    分享到