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、分支(判断)语句的用法

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

 #!/bin/sh

 #提示“请输入姓名”并等待30秒,把用户的输入保存入变量name中
read -t -p "请输入用户名称:" name
#echo -e 处理特殊字符,如换行
echo -e "\n"
echo "用户名为:$name"
#提示“请输入密码”并等待30秒,把用户的输入保存入变量age中,输入内容隐藏
read -t -s -p "请输入用户密码:" pw
echo -e "\n"
echo "用户密码为:$pw"
#提示“请输入性别”并等待30秒,把用户的输入保存入变量sex中,只接受一个字符输入
read -t -n -p "请输入用户性别:" sex
echo -e "\n"
echo "性别为$sex" #注意if的空格以及[]里面的空格
if [ "$SHELL" = "/bin/bash" ];then
echo "SHELL is : $SHELL"
else
echo "login shell is $SHELL"
fi

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

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

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

   2.3.2、循环语句的用法

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

 #!/bin/bash

 fileName=zyr.secret
count=`cat $fileName | wc -l`
#下面是一个管道,下面循环读文件中的每一行
cat $fileName |
while read line
do
user=`echo $line|awk -F ':' '{print $1}'`
#代表以 :分段$1就是取第1段
uid=`echo $line|awk -F ':' '{print $3}'`
echo "hello, $user Your UID is $uid"
done
echo "====User_count:$count===="
#前面求得的用户数
zyr::pw23
lsx::pw123
default::pw223

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

#!/bin/sh
cd /d/LinuxScript
mkdir shell_make
cd shell_make
for ((i=; i<; i++)); do
touch test_zyr_$i.txt
done

   掌握了顺序、分支、循环语句,在任何一个语言之中,我们都能够游刃有余了,这是因为程序最基本的三个元素就是这些语句了,只要我们多加熟悉,掌握其中的精妙之处,注意标点符号、空格、特殊字符的用法,再加上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中脚本的使用方法的更多相关文章

  1. linux中shell截取字符串方法总结

    截取字符串的方法一共有八种,主要为以下方法 shell中截取字符串的方法有很多中, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=wo ...

  2. Linux中执行 .sh 的方法

    linux下执行.sh文件的方法 .sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限. 是bash脚本么 可以用touch test.sh #创建test.sh ...

  3. linux中脚本在任意目录执行

    完成了一个脚本,find.sh 如果希望可以再linux系统中任何位置都可以执行该脚本,可以执行下面操作 1. chmod 775 find.sh 给该脚本增加可执行权限 2. export PATH ...

  4. linux中wget的使用方法介绍

    wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能和特点:(1)支持断点下传功能:这一点,也是网络蚂蚁和Fl ...

  5. linux中脚本扑捉(trap)信号问题

    扑捉ctrl+c信号: #!/bin/bash trap ; function trap() { echo "You press Ctrl+C."; echo "Exit ...

  6. linux中sed的使用方法具体解释(对行数据的加入、删除等)

    sed使用语法 [root@fwq test]# sed --help 使用方法: sed [选项]... {脚本(假设没有其它脚本)} [输入文件]... -n, --quiet, --silent ...

  7. linux中安装软件的方法

    1. apt-get 安装方法ubuntu 世界有许多软件源,在系统安装篇已经介绍过如何添加源, apt-get 的基本软件安装命令是: sudo apt-get install 软件名 2. 编译安 ...

  8. Linux中脚本运行错误(坏的解释器:没有那个文件或目录)

    原因: 在Linux中有时候我们将在Windows下编写的脚本拷贝到Linux环境中运行时会出现运行不了的情况. 主要还是Windows的换行符为\r\n,而Linux环境中的换行符号为\n. 解决办 ...

  9. linux中无法使用sudo的方法

    xxx is not in the sudoers file.This incident will be reported.的解决方法 1.切换到root用户下. 2.添加sudo文件的写权限,命令是 ...

随机推荐

  1. 发布.net 4.0的站点到IIS7.5下时无法访问

    现象: 初始发布.net 4.0站点到IIS7.5下时,各种配置都完毕的情况下依旧无法访问.首页显示站点目录结构(注:开启目录结构访问后会显示这个错误,否则会提示开启),访问次级目录提示:Handle ...

  2. Bitcoin交易及验证

    目录 UTXO 理解 交易的结构 交易的确认 交易验证 逆波兰表示法 使用逆波兰表示法验证交易 UTXO 理解 未花费交易输出: Unspent Transxtion output UTXO---用比 ...

  3. 【转】C#微信公众平台开发者模式开启代码

    using System; using System.IO; using System.Text; using System.Web.Security; namespace HPZJ.Web.sys. ...

  4. iOS开源项目周报0119

    由OpenDigg 出品的iOS开源项目周报第六期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等. Sharaku ...

  5. python爬虫实战(九)--------拉勾网全站职位(CrawlSpider)

    相关代码已经修改调试成功----2017-4-24 详情代码请移步我的github:https://github.com/pujinxiao/Lagou_spider 一.说明 1.目标网址:拉勾网 ...

  6. RabbitMQ---7、常见参数含义

    简介 本节主要讨论队列声明的各个参数 queueDeclare(String queue, boolean durable, boolean exclusive, Map<String, Obj ...

  7. IDEA设置类注解和方法注解(详解)

    从eclipse工具到IDEA工具的转化,发现IDEA工具配置注释模板变的不一样了,不说废话了,直接开始 一.设置类注解模板(在创建类的时候自动填充模板) /** * @ProjectName: ${ ...

  8. vim 编辑器常规操作

    所看视频教程:兄弟连Linux云计算视频教程5.1文本编辑器Vim-5.2 插入命令 a:在光标所在字符后插入; A:在光标所在行尾插入; i:在光标所在字符前插入; I:在光标所在字符行行首插入; ...

  9. Spring_Spring与DAO_Spring的事务管理

    一.Spring的事务管理 在Spring中通常可以通过以下三种方式来实现对事务的管理: 使用Spring的事务代理工厂管理事务 使用Spring的事务注解管理事务 使用AspectJ的AOP配置管理 ...

  10. csharp:datagridview enter Half Width and Full Width characters

    /// <summary> /// 全角 /// </summary> /// <param name="unicodeString">< ...