热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Shell的编程规范及变量

Shell的编程规范及变量技能目标:一、掌握shell脚本的编程规范二、掌握管道,重定向三、掌握shell脚本变量一、shell脚本编程规范Shell脚本打概述:就是将要执行的命令

Shell的编程规范及变量

技能目标:一、掌握shell脚本的编程规范


                  二、掌握管道,重定向

                  三、掌握shell脚本变量

一、shell脚本编程规范

    Shell脚本打概述:就是将要执行的命令按顺序保存到一个文本文件,并给于该文件一定的权限,方便一次性执行的程序文件。

Shell的作用:可以批量的处理,自动化的完成一系列的维护任务,大大减少管理员的负担。


  1. 通过/etc/shells可以了解当前所支持的shell脚本种类。

       [[email protected] ~]# cat /etc/shells

/bin/sh

/bin/bash     ####大多数linux版本采用的默认shell脚本。

/usr/bin/sh

/usr/bin/bash

/bin/tcsh

/bin/csh

2、编写shell的规划做法:第一行“#!/bin/bash”是一种特殊的脚本声明,表示此行以后的语句通过/bin/bash程序来解释执行;其他以“#”开头的语句表示注释信息;echo命令用于输出字符串,以使得脚本信息更容易读懂。

例[[email protected] ~]# vi first.sh

#!/bin/bash

#This is my first Shell-Script

cd /boot/

echo "当前的目录位于:"

pwd

echo "其中以vml开头的文件包括:"

ls -lh vml*

~

wq执行命令是三种方法:(1):./first.sh

                     (2):. first.sh

                    (3):.sh first.sh

二、掌握管道,重定向

1、管道符号是“|”将左侧的输出结果作为右侧命令的输入(处理对象),同行命令中可以使用多个管道。

[[email protected] ~]# grep "/bin/bash$" /etc/passwd   ##过滤查询使用“/bin/bash”作为shell用户名时

root:x:0:0:root:/root:/bin/bash

lai:x:1000:1000:lai:/home/lai:/bin/bash

[[email protected] ~]# grep "/bin/bash" /etc/passwd | awk -F: '{print $1,$7}'   ##用awk命令可以进一步过滤第一第7列的内容。(awk命令是以冒号作为分隔)

root /bin/bash

lai /bin/bash

[[email protected] ~]# df -Th | grep "/$" | awk '{print $6}'    ###表示grep/$表示以“/”结尾的行

2%

2、重定向符号:标准输入指的是键盘标号是0;标准输出指的是显示屏编号是1;标准错误标号是2;

   <符号表示重定向输入

   >和>>表示重定向输出,分别用于覆盖和追加文件

重定向输入 :减少密码繁琐输入用“--stdin”选项

[[email&#160;protected] ~]# vi pass.txt     ##添加初始密码串内容“lai123”

[[email&#160;protected] ~]# passwd --stdin lai    ##从pass.txt文件中取密码

Changing password for user lai.

passwd: all authentication tokens updated successfully.

重定向输出 : 将当前主机CPU信息(uname -p)

[[email&#160;protected] ~]# uname -p > kernel.txt   ##当前主机的cup信息保存到文件kernel.txt文件中(-p表示指定目录向上级目录递归)

[[email&#160;protected] ~]# cat kernel.txt      ###查看kernel.txt文件中的内容

X86_64

[[email&#160;protected] ~]# uname -r >> kernel.txt保存原有内容的追加(-r表示指定目录向下级目录递归)

[[email&#160;protected] ~]# cat kernel.txt

X86_64

2.6.32-431.el6.86_64

错误重定向:使用>2操作符2表示错误文件的编号 ##同理也可以用2>>表示追加

[[email&#160;protected] ~]# tar jcf /nonedir/etc.tgz /etc/ 2> error.log  ##用tar命令进行备份时出现的错误信息保存到error.log文件中

[[email&#160;protected] ~]# cat error.log

tar: Removing leading `/' from member names

tar (child): /nonedir/etc.tgz: Cannot open: No such file or directory

tar (child): Error is not recoverable: exiting now

可以用&>操作符将两类输出信息保存在同一个文件。

make &> /dev/null    ###后面是相当于回收站

make install &> /dev/null

三、shell脚本的变量揭秘

     Shell变量用来存放系统和用户需要使用的特定参数的值,而且这些参数可以根据用户的设定或系统环境的变化而相应的变化。常用的变量类型包括:自定义变量,环境变量,位置变量,预定义变量。


  1. 自定义变量

   定义变量的基本格式是 “变量名=变量值”等号两边没有空格

   变量名需要以字母或者下划线开头,并且名称中不要包括特殊字符(如+、-、*、/、.、?、%、&、#等)

 [[email&#160;protected] ~]# Product=Weixin

[[email&#160;protected] ~]# Version=6.0

[[email&#160;protected] ~]# echo $Product   ##用echo和前导符号$可以查看变量值

Weixin

[[email&#160;protected] ~]# echo $Product $Version

Weixin 6.0

[[email&#160;protected] ~]# echo $Product4.5  ##为防止混淆变量名称与其他字符需要加{}号。

.5

[[email&#160;protected] ~]# echo ${Product}4.5

Weixin4.5


  1. 变量的特殊赋值(如     `   read)

双引号:主要是其界定字符串的作用,特别是当赋值的内容包含空格时必须双引号括起来。

        使用$符号可以应用其他变量的值(变量引用)以直接调用现有变量的值给新变量

[[email&#160;protected] ~]# Weixin=Weixin 5.0

bash: 5.0: command not found...

[[email&#160;protected] ~]# Weixin="Weixin 5.0"

[[email&#160;protected] ~]# echo $Weixin

Weixin 5.0

[[email&#160;protected] ~]# QQ="QQ $Version"

[[email&#160;protected] ~]# echo $QQ

QQ 6.0

单引号:当需要赋值的内容中有特殊字符时要用单引号括起来。单引号内的特殊字符均以普通字符看待。赋值内容包含但引号用“\”符号进行转义,以免冲突。

[[email&#160;protected] ~]# QQ='QQ $Version'

[[email&#160;protected] ~]# echo $QQ

QQ $Version              ##符号不在引用变量原样输出字符串

反撇号:用于命令替换,允许将执行某个命令的屏幕输出结果赋值给变量。反撇号括起来的范围必须是能够执行的命令行,不然将出错。

[[email&#160;protected] ~]# ls -lh `which useradd`  ##先查找位置在根据结果列出文件属性

-rwxr-x---. 1 root root 116K Oct 31  2018 /usr/sbin/useradd

使用反撇号难以在一行命令中实现嵌套命令替换操作,这时候可以改用“$()”来代替反撇号操作,已解决嵌套的问题。

[[email&#160;protected] ~]# rpm -qc $(rpm -qf $(which useradd))

/etc/default/useradd    ##查看提供useradd命令程序的软件包所安装的配置文件位置。

/etc/login.defs

Read命令:使用bash的内置命令read来给变量赋值。Read提示用户输入信息。从而实现信息交互过程。执行时将从标准输入设备(键盘)读入一行内容,并以空格为分隔符,将读入的各字段挨个赋值给指定的变量(多余命令赋予给最后一个变量),若指定的变量只有一个则将正行内容赋值给此变量。  read命令可以结合-p和-t选项来设置提示信息和输入的等待时间(单位为秒),以便告知用户应该输入什么内容等相关事项的规定时间内未输入自动跳出。

[[email&#160;protected] ~]# read ToDir1

/opt/backup/

[[email&#160;protected] ~]# echo $ToDir1

/opt/backup/

[[email&#160;protected] ~]# read -p "请指定备份存放目录:" ToDir2

请指定备份存放目录:/opt/backup

[[email&#160;protected] ~]# echo $ToDir2

/opt/backup

设置变量的作用范围

局部变量:默认情况下新定义的变量只在当前的shell环境中有效。当进入子程序或者子shell环境中时,局部变量将无法在使用。当然也可以使用Export将指定的变量导出“全局变量”可以指定多个变量名称做参数(无需$符号)变量名之间空格分开    使用export导出全局变量的同时,可以为变量进行赋值,这样在新定义全局变量时就不需要提前进行赋值。

 

数值变量的运算bash shell环境中,只能简单运算不支持小数运算,整数运算主要通过expr命令进行。运算符与变量之间必须有一个空格。

如果执行简单的整数运算,只需要将特定对的算术表达式用“$((”和“))”括起来即可。

 


  1. 特殊变量:包括环境变量;位置变量;预定义变量;

环境变量:指出于运行需要而由LINUX系统提前穿件的一类变量,主要用于设置用户的工作环境,包括用户宿主目录、命令查找路径、用户当前目录、登录终端等。

位置变量:为方便shell使用脚本程序时,方便通过命令行为程序提供超作参数,bash引入了位置的概念

预定义变量:bash预先定义好的一个特殊变量。常用$符号和另一个符号表示,含义如下:

      $#:表示命令行中位置参数的个数

$*:表示所有位置参数的内容

$?:表示前一条命令执行后的返回状态,0是正常非0是表示出现异常。

$0:表示当前执行的脚本或程序的名称

[[email&#160;protected] ~]# chmod +x mybak.sh     ##添加执行权限

[[email&#160;protected] ~]# ./mybak.sh /boot/grub    ##备份到/boot/grub

 


推荐阅读
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Inno Setup区段之Components篇相关知识详解
    本文详细介绍了Inno Setup区段之Components篇相关的知识,包括Components和Types的使用方式以及各个参数的说明,希望对读者有一定的参考价值。内容涵盖了ComponentsName、Description、Types、ExtraDiskSpaceRequired、ExtraDiskSpaceRequiredFlags等多个关键词,帮助读者更好地理解和应用Inno Setup区段之Components篇的知识。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • tcpdump 4.5.1 crash 深入分析
    tcpdump 4.5.1 crash 深入分析 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
author-avatar
卜土杠烟2502932477
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有