1 什么是shell script?

shell script是通过shell 的功能所写的一个program,这个程序 是使用纯文本文件,将一些shell的语法与命令写在里面 ,搭配正则式,管道命令和数据流重定向等功能,以达到我们所想要的功能。

2.1  编写第一个script

#!/bin/bash
# this is first shell script
# printf Hello World
echo -e "Hello World \a \n"
exit 0​

第一行 #!/bin/bash shen声明使用的是哪一个shell

其余的 # 后面的内容都为注释。

ehco 那一行即为主程序。 这一行的内容是 打印 Hello World。 -e参数代表识别"" 中 需要显示内容的特殊字符。 这里\a 即为发出警告声,\n 为换行。

exit 0为告知程序执行结果,执行完脚本后,可以通过 echo $? 这一句命令来判断上一个命令的执行结果。

2.2 script 的执行方式区别

  1.  利用直接执行的方式

在命令行下直接执行绝对路径或者相对路径,或者sh script.sh

这种执行方式 script是在子进程的bash内执行。当子进程完成后,子进程内的各项变量或操作将会结束而不会传回父进程。

2 .利用source来执行脚本。

# source script.sh

这个script就会在这个bash  内部生效。这也是为什么不注销系统的时候,修改.bashrc 里面的配置并使其生效的时候,使用source ~/.bashrc 而不是 sh  ~/.bashrc。

3 script中常用的命令和判断式

3.1 test 命令

tset 命令用来检测系统上面某些文件或者是相关的属性。

例如:

test -e ./test .sh && echo “exit”|| echo “not exit”

这句命令是判断test.sh这个文件存不存在,然后再命令行中打印相关结果,如果存在就打印exit,反之就打印not exit。

Test后面接的常用命令解释: test -e file

关于某个文件名的文件类型的判断

-e 该文件名是否存在、

-f 该文件名是否存在且为文件

-d 该文件名是否存在且为目录

关于文件权限的检测:test -r file

-r 检测该文件名是否存在且具有 可读 权限

-w 检测该文件名是否存在且具有 可写 权限

-x 检测该文件名是否存在且具有 可执行 权限

-s 检测改文件名是否存在且为 非空白文件

两个文件之间的比较:test file1 -nt file2

-nt (newer than)判断文件1 是否比文件2 新。

-ot  (older than ) 判断文件1 是否比 文件2 旧。

-ef  判断文件1  和文件2  是否是同一个文件,可用在判断hard link的判定上。 主要是判断两个文件是否指向于同一个inode。

 两个整数之间的判断:test n1 -eq n2

-eq 两个数是否相等

-ne 两个数字是否不等

-gt  n1 是否大于n2

-lt  n1 是否小于n2

-ge  n1 是否大于等于n2

-le  n1是否小于等于n2

判断字符串的数据:

Test -z string 判断字符串是否为0,如果为空字符串,则为true

Test -n string 判断字符串是否不为0,如果为空字符串,则为false

注意:-n可以省略

Test str1 = str2 判断str1 和str2 是否相等,相等则为true

Test str1 != str2 判断str1 和str2 是否不相等,相等则为false

多重条件判断:

-a 两个条件同时成立。 test -r file -a -x file,当文件同时具有可读和可执行权限的时候,才为true

-o 任意一个条件成立。test -r file -o -x file,当文件同时具有可读或者可执行权限的时候,就为true

! 反向的状态。 test ! -x file 当file不具有x时,则为true。

3.2 利用 判断符号[]

[ -z $HOME ]; echo $?

上面是判断HOME这个变量是否为空。中括号的使用方法和test几乎一样,只是中括号常用于添加判断式中。后面会讲到。

注意事项:

1 在中括号[]里面的每一个组件都要有空格键来隔开。

2 在中括号[]里面的变量都以双引号来括号起来。

3 在中括号[]里面的常量都以双引号或单引号来括号起来。

譬如:

Name = shell sh

[ $NAME == “sh” ] 这是不对的,会报 bash: [: too many argument

上面判断会等于[ shell sh == “sh” ] 一个判断式仅能有两个数据,但是这个判断式有三个数据了。应该 [ “shell sh” == “sh” ]才对。

hyz@ubuntu:~/test$ cat zhongkouhao.sh
#!/bin/bash
# Program:
# show user choice
# History:
# 2019/08/11read -p "Please Input you choice Y/N:" choice
[ "$choice" == "y" -o "$choice" == 'Y' ] && echo "OK,continue" && exit 0
[ "$choice" == "n" -o "$choice" == 'N' ] && echo "not ok,interrupt" && exit 0
echo "I do not know you choice" && exit 0 

上面就是读到控制台的参数,然后进行判断和相关的打印。

3.3 shell script的默认变量 $0 $1

Script 针对变量名是已经有设置好一些变量名称了。

/shell/var.sh opt1 opt2 opt3 opt4

$0     &1  &2  &3  &4

特殊变量:

$#: 代表后面接的参数的个数

$@: 代表”$1” ,“$2”, “$3”

$*:  代表 “$1c$2c$3c”,其中c为分隔字符,默认为空格键。

Shift:造成参数变量号码偏移。

hyz@ubuntu:~/test$ cat var.sh
#!/bin/bash
# Program:
# show script name,par and so
# History:
# 2019/08/11echo "total par numver is : $#"
echo "you whole pa is  '$@' "
echo "you whole par is $* "
echo "the firtt numver is $1"
shift
echo "total par numver is : $#"
echo "you whole pa is  '$@' "
shift 2
echo "total par numver is : $#"
echo "you whole pa is  '$@' "hyz@ubuntu:~/test$ source var.sh  one two three four five
total par numver is : 5
you whole pa is  'one two three four five'
you whole par is one two three four five
the firtt numver is one
total par numver is : 4
you whole pa is  'two three four five'
total par numver is : 2
you whole pa is  'four five' 

4 条件判断式

4.1 if...then

单层判断式:

 if [条件判断]; then

     条件成立时的操作

  fi

可以将所有条件写入一个中括号里面也可以写入多个中括号用 && 或者|| 来隔开。

[ “$choice”  ==  “Y” -o “$choice”  ==  ‘y’ ]

等同于:

[ “$choice”  ==  “Y” ] || [  “$choice”  ==  ‘y’ ]

多重条件判断式:

 if [条件判断1]; then

   条件1成立干的事

 elif [条件判断2 ]; then

   条件1 不成立,条件2成立 做的事

 else

   条件1 和条件2 都不成立干的事

 fi

4.2 case..esac

case $变量名称 in

     第一个变量内容

          程序段

      ;;

      第二个变量内容

          程序段

      ;;

      *)

        不包括第一个变量和第二个变量的执行程序段

         exit 1;

       ;;

   esac

4.3 function

Function fname(){

程序段

}

因为shell script的执行是由上而下 由左向右,所以function都需要设置在程序的最前面。

另外,Function也是拥有内置变量的,他的内置变量与shell script类似,函数名称代表$0,后续的变量也是以$1 $2 Kauai代替的。

hyz@ubuntu:~/test$ cat funtion.sh
#!/bin/bash
# Program:
# user fucntion print information
# History:
# 2019/08/11
function print(){echo "you choice is $1"
}echo "Thsi program will print you selection"
case $1 in"one")print 1;;"two")print 2;;*)echo "Usage $0 [one|two]";;
esac
hyz@ubuntu:~/test$ source funtion.sh one
Thsi program will print you selection
you choice is 1
hyz@ubuntu:~/test$ source funtion.sh three
Thsi program will print you selection
Usage bash [one|two]

5 循环 loop

 5.1 while do done,until do done (不定时循环)

伪代码:

While [conditon]

do

Program

done

当 condition成立的时候就进行循环。

Until [conditon]

do

Program

done

 当condition成立的时候终止循环。

 5.2 for...do...done (定时循环)

for var in con1 con2 con3

do

Program

done

$var 的变量内容在循环工作时一直在改变:

1 第一次循环,$var 为con1

2 第二次循环,$var 为con2

3 第三次循环,$var 为con3

......

for var in $(seq 1 100)

$var的变量的内容是 从1 到100 ,seq是指连续的意思。

另外一种写法:

for ((初始值;限制值;执行步长))

do

Program

done

和c语言类似:

初始值: 某个变量在循环当中的初始值,直接以类似i =1设置好;

限制值: 当变量的值在这个限制值的范围内,就继续进行循环,例如i<100;

执行步长: 没做一次循环,变量的变化值,例如i=i+1;

hyz@ubuntu:~/test$ cat for.sh
#!/bin/bash
# Program:
# printf 1+2+...+n
# History:
# 2019/08/11
read -p "Please input a number,I will cont for 1+2+...+n: " nus=0
for (( i=1; i<=$nu; i++ ))
dos=$(( $s + $i ))
done
echo "The result is $s"
hyz@ubuntu:~/test$ source for.sh
Please input a number,I will cont for 1+2+...+n: 5
The result is 15
hyz@ubuntu:~/test$

6 shell script 的追踪和调试

 # sh [-nvx] script.sh

-n 不要执行script,进查询语法的问题

-v 在执行script的时候,先将script你们的内容输出到屏幕上

-x 将使用到的script内容显示到屏幕上

由sh -x的方式来将命令执行过程也显示出来,如此用户可以判断程序代码执行到哪一段时会出现相关的信息。

感谢linux鸟哥的私房菜。

shell script简介相关推荐

  1. Shell 编程 Shell Script

    Shell Script简介 什么是shell script? shell:与内核通信的工具: script:脚本: shell script:针对shell所写的脚本. 利用shell功能所写的一个 ...

  2. shc - Generic shell script compiler

    参考:https://blog.csdn.net/whatday/article/details/104730095?ops_request_misc=%257B%2522request%255Fid ...

  3. (四) Shell脚本简介,变量的定义、引用、删除,常见状态和运算符,命令,软件的安装和维护(RPM),软件的安装和维护(yum)

    1,课程回顾 2,本章重点 shell 脚本 软件管理(rpm yum) 3,具体内容 3.1 Shell脚本简介 3.1.1 什么是shell脚本 1.当命令不在命令行中执行,而是从一个文件中执行时 ...

  4. 「学习笔记-Linux」学习Shell Script

    学习Shell Script Table of Contents 1 什么是Shell Scipt 1.1 程序书写 1.2 程序执行 2 简单Shell练习 2.1 例1 接收用户输入 2.2 例2 ...

  5. linux 下 将 shell script 与 一个桌面图标联系在一起 (2)

    Cy163注: 步骤如下: (1)         建立 xxxxx.sh (2)         在 vnc 虚拟终端 的desktop上,右键,然后选择"创建启动器" (3)  ...

  6. Linux08--Shell程序设计03 shell script

    第一个Shell脚本--HelloWorld [root@localhost ~]# vi sh01.sh #!/bin/bash #!表明使用哪种shell # this is my first s ...

  7. 那些年我们一起追过的Shell Script

    原本这是自己在几个月前为公司的一个分享活动写的一个投影片,今天趁大脑负荷比较小,把这个话题拿到blog上面来分享一下.从知道shell算起至今也就几个年头而已,如今勉强算是入门了.对某一个新事物的掌握 ...

  8. 面向dba的linux shell 脚本简介,面向 DBA 的 Linux Shell 脚本简介

    DBA:Linux 面向 DBA 的 Linux Shell 脚本简介 作者:CasimirSaternos 学习一些在 Linux 上安装.运行和维护 Oracle 数据库所需的基本 bash sh ...

  9. Linux shell script 的语法汇总

    2019独角兽企业重金招聘Python工程师标准>>> 条件判断式 if判断式 if [ 条件判断式1 ]:then执行动作 elif [ 条件判断式2 ]:then执行动作 els ...

  10. linux-basic(13)学习shell script

    [13.1]什么是shell script? 1)shell script 是利用 shell 的功能所写的一个『程序 (program)』,这个程序是使用纯文字档,将一些 shell 的语法与命令( ...

最新文章

  1. SAP HUM 使用HU02去Unpack一个HU
  2. 服务器 'xxxx' 已被定义为分发服务器。若要将该服务器重新配置为分发服务器,必须首先卸载现有的分发服务...
  3. 最难忘的一天----一周年记
  4. File类3 文件读取
  5. boost::hof::flip用法的测试程序
  6. HDU4302(map的用法)
  7. python tkinter button颜色变不了_tkinter多按钮颜色变化
  8. UEFI+GPT与BIOS+MBR的优缺点
  9. mysql中转换成字符串_如何在R中转换字符串的大小写?
  10. python中plot不能显示标签_解决python中使用plot画图,图不显示的问题
  11. C++基础——new与delete
  12. 如何将视频转换成文字
  13. 信奥赛1990:【19CSPS提高组】划分
  14. 基于HTML+CSS+JavaScript篮球NBA兴趣交流网页设计
  15. 台式计算机硬件组成主机,台式电脑主机的硬件组成部分简介
  16. C++基础概念(初步代码示例英石与磅单位互换)
  17. erp系统有哪些功能模块?
  18. mysql 应用系统_MySQL应用
  19. 蓝屏总结(一) ——基本分析方法
  20. ArcGis处理水力梯度,用栅格计算器求水位年际变化等

热门文章

  1. 热模块替换/热更新 HMR
  2. 计算机网络提升培训心得体会,计算机网络培训心得体会.doc
  3. java后台实现HTTPS协议方法
  4. 《庄子·杂篇·列御寇第三十二》
  5. Python:忽如一夜春风来,千树万树梨花开
  6. ma5671怎么设置_电信/联通/移动,更换华为MA5671光猫详细教程
  7. 金三银四已过,为大家整理一批高频java面试题,花点耐心看完,offer拿到手软!
  8. c#语言中文编程下载,C#编程自学软件
  9. el-form 表单的校验
  10. 发展你的GDS的应用技术