Linux中脚本的使用方法

一、前言

关于Linux中的脚本的用法,一直没有时间去好好地总结,正好今天下雨,就好好的整理一下思路吧,其实精通了一门语言,比如C语言,学习其他语言需要的成本是非常少的,同样的脚本作为一种比较简易的语言,只要知道了语法,我们在通过几个例子好好的理解和掌握一下常规的使用,这样就等于是入门了,之后要想精深的话,其实更应该学习一下Linux中的命令,比如三剑客、文件操作的命令、进程管理的命令、重定向、管道等,这样我们也算是能够登堂入室了,不管是什么语言,最重要的是使用,不用来使用的语言,学习是毫无意义的,过不了多长时间就会忘记的。

二、Linux脚本的使用

2.1、脚本的运行

脚本可以很简单,其实就是将Linux中的命令配上一定的语法去展现出来,下面我们看一个最简单的脚本,因为笔者是在windows中操作的,安装的Git里面就自带有Linux脚本的运行环境(MinGW64),其实和Linux里面是一样的,所以大家注意区分即可。

name='zyr'echo'hello,zyr'

(1)bash/sh  脚本名.sh

其中sh是bash这个程序的软连接,需要找到bash再执行,因此执行的要稍微慢一点,当脚本文件本身没有可执行权限时常使用的方法,使用ll命令可以看到文件权限属性x位为-号;或者脚本文件开头没有指定解释器时需要使用的方法,将重新启动一个子shell(进程)来执行命令。从运行也可以看出来,这个$name根本就不是我们设置的,只是这个系统中已经设置的,说明是重新启动了一个shell(子进程)来完成的,shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。这样也好理解,因为如果凡事都需要shell自身来完成的话,有可能就阻塞了后续的执行了,这是一种折中的方法。

(2)path/脚本名.sh

如果是在当前文件夹下,需要使用 ./脚本名.sh 。使用这种方式需要脚本有执行权限,具体方法为:chmod a+x script-name。然后通过执行脚本绝对路径或者相对路径就可以执行脚本了。在生产环境中,运维人员由于忘记为该脚本设置可执行权限,然后直接使用,导致出错,将重新启动一个子shell(进程)来执行命令。因此,推荐第一种 bash script-name。出乎意料的,我们在没有执行权限的时候竟然运行成功了,这说明了什么,只能说明我们使用的这个MinGw64权限太大了。在Linux环境中就需要修改权限了。同样的也是重新启动了一个子进程。

(3)source script-name或者 . script-name

source或者“.”命令的功能是:读入脚本并执行脚本,即在当前Shell中执行source或“.”加载并执行的相关脚本文件的命令及语句,而不是产生一个子Shell来执行文件中的命令。可以看到我们使用这种命令实现了在本shell中执行该脚本的功能,正确的输出了name。

2.2、脚本规范的写法

在上面我们使用的脚本是不规范的,因为我们没有在开头描写我们要使用什么解释器来解释和执行,因此在正规的场景之中,我们需要写上这些信息,并且使用第一种方式来执行。一个规范的Shell脚本在第一行会指出由哪个程序(解释器)来执行脚本中的内容,这一行内容在Linux bash的编程一般为:#!/bin/bash或#!/bin/sh 。

(1)在Shell中如果一行的第一个字母是#,则是注释,但是写在第一行,则不是脚本注释行,如果写在某个命令之后,则变成注释行。

(2)sh为bash的软链接,大多数情况下,脚本的开头使用“#!/bin/bash”和“#!/bin/sh”是没有区别的,但更规范的写法是在脚本的开头使用“#!/bin/bash”。

#!/bin/bash

name='zyr'#定义变量

echo'hello,zyr' #输出字符串

2.3、脚本的语法

注意事项:

A1、当变量名被其他字符串混淆的时候,需要加{}

A2、对变量赋值的时候,在赋值号‘=’的左右不要留下空格

A3、在使用echo输出的时候,需要使用双引号""才能够将变量转换成数值输出出去,不然将会按照字符串处理。单引号更严格一些,可以防止任何变量扩展。双引号可以防止通配符扩展但允许变量扩展。

2.3.1、分支(判断)语句的用法

比如我们下面接收用户输入的参数,然后将这些参数显示出来并且对系统变量进行判断的脚本:

1 #!/bin/sh

2

3

4 #提示“请输入姓名”并等待30秒,把用户的输入保存入变量name中5 read -t 30 -p "请输入用户名称:"name6 #echo -e 处理特殊字符,如换行7 echo -e "\n"

8 echo "用户名为:$name"

9 #提示“请输入密码”并等待30秒,把用户的输入保存入变量age中,输入内容隐藏10 read -t 30 -s -p "请输入用户密码:"pw11 echo -e "\n"

12 echo "用户密码为:$pw"

13 #提示“请输入性别”并等待30秒,把用户的输入保存入变量sex中,只接受一个字符输入14 read -t 30 -n 1 -p "请输入用户性别:"sex15 echo -e "\n"

16 echo "性别为$sex"

17

18

19 #注意if的空格以及[]里面的空格20 if [ "$SHELL" = "/bin/bash" ];then

21 echo "SHELL is : $SHELL"

22 else

23 echo "login shell is $SHELL"

24 fi

可以看到根据脚本的不同命令,shell能够正确的执行并且显示相应的结果,同样的,这里要说一下if语句,在编写shell的时候,如果是在windows里面,我们最好使用sublime来编辑,这样可以很容易的发现出现的错误,比如说if语句,如果不注意空格,那么将会出错,在sublime中是能够看到提示的,如果是在Linux之中,我们就使用vim或者gedit这些都能智能提示的。

比如说下面的就是错误的,必须有空格才能识别完整,好的编辑器能够事半功倍:

当然if语句也有其他的写法,比如使用&&和||来表示的,根据我们的需要,再一点点的掌握。

2.3.2、循环语句的用法

接下来我们看一下while循环:

1 #!/bin/bash2

3 fileName=zyr.secret4 count=`cat $fileName | wc -l`5 #下面是一个管道,下面循环读文件中的每一行6 cat $fileName |

7 whileread line8 do

9 user=`echo $line|awk -F ':' '{print $1}'`10 #代表以 :分段$1就是取第1段11 uid=`echo $line|awk -F ':' '{print $3}'`12 echo "hello, $user Your UID is $uid"

13 done

14 echo "====User_count:$count===="

15 #前面求得的用户数

zyr:12:pw23

lsx:34:pw123

default:134:pw223

当然也可以使用for语句,比如下面的语句是创建文件夹,并且在文件夹里循环创建文件。

#!/bin/shcd/d/LinuxScriptmkdirshell_make

cd shell_makefor ((i=0; i<20; i++)); do

touchtest_zyr_$i.txtdone

掌握了顺序、分支、循环语句,在任何一个语言之中,我们都能够游刃有余了,这是因为程序最基本的三个元素就是这些语句了,只要我们多加熟悉,掌握其中的精妙之处,注意标点符号、空格、特殊字符的用法,再加上Linux中的一些基本的命令,我们就能很好的使用脚本来完成我们想要做的工作了。

2.4、Linux之中命令的一些基本技巧

使用curl抓取网页:

curl www.baidu.com

抓取并保存文件:

curl -o zyr.baidu www.baidu.com

#!/bin/bash

response=$(curl www.baidu.com)echo $response

三、总结

其实Linux脚本很容易学习,最重要的是多练习,并且有参考资料,可以及时去查阅,总体来说,使用Linux脚本的前提就是要掌握好Linux的命令,特别是那些常用的命令,之后将自己任务中常用的操作设计成脚本,然后使用起来就很方便了。当然还有很多东西都没有讲到,比如case语句,一些基本的符号表示的含义等等,但是这些在使用的时候还是很常用的,我们需要经常练习才行。

linux y脚本,Linux中脚本的使用方法相关推荐

  1. 【Unity3D】Android Studio 工程中使用 Java 代码调用 Unity 的 C# 脚本 ( Java 中调用 UnityPlayer#UnitySendMessage 方法 )

    文章目录 一. Java 调用 C# 依赖库准备 1.依赖库位置 2.unityLibrary 依赖库位置 二. Java 调用 C# 的 UnityPlayer#UnitySendMessage 方 ...

  2. linux去掉文件空行,linux下删除文件中空行的多种方法 互联网技术圈 互联网技术圈...

    源文件: $ cat a.txt baiked.com is a best Linux blog to learn Linux. It's FIVE years old blog. This webs ...

  3. linux学习笔记——gdb中的watch使用方法

    参考链接 参考链接二 先将程序跑起来:1.直接r后再watch 变量名.2.先在观察变量处设置断点,再r至断点处,再watch 变量名. c后程序会跑到变量改变时. 注:watch其实是设置观察断点, ...

  4. java 执行js脚本_java中调用js脚本

    JDK1.6加入了对Script(JSR223)的支持.这是一个脚本框架,提供了让脚本语言来访问Java内部的方法.你可以在运行的时候找到脚本引擎,然后调用这个引擎去执行脚本.这个脚本API允许你为脚 ...

  5. linux中断处理模式,Linux在保护模式下的中断处理分析.pdf

    Linux在保护模式下的中断处理分析.pdf Linux 在保护模式下的中断处理分析 刘万里 杨 斌 (西南交通大学计算机与通信工程学院,成都 610031) E-mail:awan@ 摘 要 该文以 ...

  6. 求生之路2服务器正在执行此文件脚本,求生之路2 脚本(VScripts)

    求生之路2 脚本 是可以在游戏中的虚拟机里被运行的服务器端的脚本.它们使用Squirrel语言编写, 这是一种类似于Lua的脚本编译语言. 本页面内容由Dazai Nerau译自英文版页面. 欢迎任何 ...

  7. linux定时python,linux 中定时执行python脚本

    一.让Python随Linux开机自动运行 准备好要自启的脚本auto.py 用root权限编辑以下文件 sudo vim /ect/rc.local 在exit 0上面编辑启动脚本的命令(编辑rc. ...

  8. linux shell脚本字符串连接符,学习Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

  9. 【Groovy】Groovy 脚本调用 ( Linux 中调用 Groovy 脚本 | Windows 中调用 Groovy 脚本 )

    文章目录 前言 一.Linux 中调用 Groovy 脚本 二.Windows 中调用 Groovy 脚本 前言 在 命令行 , Groovy 脚本 , Groovy 类 , Java 类中 , 可以 ...

最新文章

  1. python 35 使用 3D densecrf (DenseInferenceWrapper)
  2. 【笔记】Java数据结构与算法
  3. 从其它系统登录到SharePoint 2010系统的单点登录
  4. 深度学习基础系列(十)| Global Average Pooling是否可以替代全连接层?
  5. C++读取Access数据库
  6. 【中间件技术】第一部分 概述(1) 软件构件与中间件基本概念
  7. 关于Python 向pdf添加印章效果的思考及实现
  8. mysql数据库基础知识总结
  9. 《密码编码学与网络安全》和《现代密码学》PDF
  10. 阿里云商标驳回复审申请收费价格、结果时间及常见问题解答
  11. 备份一下Linux笔记
  12. 科学记忆单词---麦克米伦
  13. Tomcat对Servlet规范的Filter及Listener实现
  14. 分享model.predict(test)与model.predict_classes(test)的用法
  15. Arduino和Python实时监督控制和数据采集系统(SCADA)
  16. 智慧园区智能化管理系统解决方案
  17. VS未能正确加载 ”Microsoft.VisualStudio.Editor.Implementation.EditorPackate“包错误解决方法...
  18. 从零开始使用composer开发php项目解决各种包调用
  19. 智能驾驶事故频发,AEB为何无法「兜底」安全
  20. PyCharm配置远程解释器

热门文章

  1. invoke与call
  2. SpringMVC Controller介绍(转)
  3. .NET程序员的C情结(二)
  4. [BTS06]BizTalk2006 SDK阅读笔记(五) 管道-Pipeline
  5. 窗口缩放导致页面排版错乱的解决方法
  6. Linux磁盘占用100%解决方法
  7. JAVA编译异常处理:java.lang.OutOfMemoryError: PermGen space
  8. 树莓派连接显示器不亮屏的解决方案
  9. js解决iframe跨域问题
  10. SpringMVC注解@initbinder解决类型转换问题