Shell基础知识和编程规范

一,Shell环境查看

1.1 查看系统Shell支持情况
[[email protected] ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
1.2 查看当前系统默认的Shell

方法一

[[email protected] ~]# echo $SHELL
/bin/bash

方法二

[[email protected] ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash

提示:后面/bin/bash就是用户登陆后的Shell解释器

二,Shell脚本的建立和执行

2.1 脚本开通(第一行)

一个规范的Shell脚本在第一行会指出由哪个程序(解释器)来执行脚本中的内容,这一行内容在Linux bash的编程一般为

#!/bin/bash
或
#!/bin/sh #<---255个字符以内

其中,开头的“#!"字符又称为幻数,在执行bash脚本的时候,内核会根据“#!”后面的解释器来确认哪个程序解释这个脚本中的内容(注意 这一行必须在每个脚本顶端第一行)

2.2 bash与sh的区别

sh为bash的软连接

[[email protected] ~]# ll /bin/sh
lrwxrwxrwx. 1 root root 4 Aug  6  2016 /bin/sh -> bash
2.3 查看系统版本
[[email protected] ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core) 

查看bash版本

[[email protected] ~]# bash --version
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

测试bash是否有破壳漏洞,如果返回be careful,则表示需要尽快升级bash了

[[email protected]]# bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[[email protected]]#
[[email protected]]# env x=‘() { :;}; echo be careful‘ bash -c "echo this is a test"
be careful
this is a test
2.4 升级bash方法
[[email protected]]# yum -y update bash
[[email protected]]# rpm -qa bash
bash-4.1.2-48.el6.x86_64
[[email protected]]# env x=‘() { :;}; echo be careful‘ bash -c "echo this is a test"
this is a test  #再次执行已没有be careful提示

提示:如果没有输出be careful,则不需要升级

2.5 脚本注释

在Shell脚本中,跟再#后面的内容表示注释,开发脚本时,如果没有注释,那么团队里的其他人就会很难理解加班对应内容的用途,而且时间长了自己也会忘记。为了方便别人和方便自己,避免影响团队的协助效率,

要养成一个写关机注释的习惯。脚本注释尽量不要用中文,避免乱码问题

2.6 Shell脚本的执行

当Shell脚本运行时,它会先查找系统环境变量ENV,改变量指定了环境文件,加载顺利通车是/etc/profile ---> ~/.bash_profile ---> ~/.bashrc --->/etc/bashrc等,在加载了上述的环境变量文件后,Shell就开始执行脚本中的内容

通常情况下,在执行Shell脚本时,会向系统请求启动一个新的进程,以便在该进程中执行脚本的命令及子Shell脚本。

提示:设置crond任务时,最好能再定时任务脚本中重新定义系统环境变量,否则,一些系统环境变量将不会被加载,这个问题需要注意!

Shell脚本的执行可以采用以下几种方式:

1).bash 脚本名 或sh 脚本名 (推荐使用)

[[email protected] ~]# bash test01.sh
Welcome warren
[[email protected]-node1 ~]# sh test01.sh
Welcome warren

2). 使用脚本的绝对路径执行 或相对路径 ./脚本名 这个需要有文件的执行权限

[[email protected] ~]# chmod +x test01.sh
[[email protected]-node1 ~]# /root/test01.sh
Welcome warren
[[email protected]-node1 ~]# ./test01.sh
Welcome warren

3).source 脚本名 或  . 脚本名

[[email protected] ~]# source test01.sh
Welcome warren
[[email protected]-node1 ~]# . test01.sh
Welcome warren

4) sh < 脚本名 或 cat 脚本名|sh

[[email protected] ~]# cat test01.sh
echo "Welcome warren"
[[email protected]-node1 ~]# sh < test01.sh
Welcome warren
[[email protected]-node1 ~]# cat test01.sh |bash
Welcome warren

使用cat 创建脚本文件

[[email protected] ~]# cat > test02.sh
echo "this is test"

Ctrl+d结束编辑,这里作为cat用法的扩展知识

父Shell不会继承子Shell的环境变量,测试如下

[[email protected] ~]# cat test.sh
user001=`whoami`
[[email protected]-node1 ~]# echo $user001
#空
[[email protected]-node1 ~]# 

使用source导入子脚本的环境变量到当前环境就可以获取子脚本的变量

[[email protected] ~]# source  test.sh
[[email protected]-node1 ~]# echo $user001
root

三, Shell脚本开发的基本规范

Shell 脚本的开发规范及习惯非常重要,有了好的规范可以大大提升开发效率,并能再后期降低对脚本的维护成本。

1). Shell脚本的第一行是指定脚本介绍器

#!/bin/bash

2). Shell脚本的开通会加班表,版权等信息

#!/bin/bash
#Date: 2017-12-5
#Author: Created by warren
#Blog: http://www.cnblogs.com/xiewenming/
#Description: This scripts function is ...
#Version:1.1

可以修改“~/.vimrc”配置文件配置vim编辑文件时自动加上以上信息

3).  在Shell脚本中尽量不用中文,防止切换系统环境后中文乱码的困扰。如果非要加中文,请根据系统进行字符集调整.

如: export LANG="zh_CN.UTF-8",并在脚本中,重新定义字符集设置,和系统保证一致。

4). Shell脚本的命名应以 .sh 为扩展名

例如: test.sh

5). Shell 脚本应存放在固定的目录下

例如:/opt/scripts

四, Shell脚本书写的良好习惯

1).成对的符合应尽量一次性写出来,然后退格在符合里增加内容,以防止遗漏。

这些成对的符合包括:

{}  []  ‘‘  ``  ""

2). 中括号两端至少各一个空格,先退2格 然后进一格,双括号也是如此

3). 对应流程控制语句,应一次将格式写完,再添加内容。

比如,一次性完成if语句的格式,应为

if 条件内容
  then
    内容
fi

一次性完成for循环语句格式,应为

for
do
  内容
done

一次完成white语句格式,应为

white 条件
do
  内容
done

提示:until和case语句也一样

4). 通过缩进让代码更易读

5). 对应常规变量的字符串定义变量值应加双引号,并且等号前后不能有空格

6). 脚本中的单引号和双引号必须为英文状态下的符合

7). 变量名称应该具有相关意思,不能太随便。

说明:好的习惯可以让我们避免很多不必要的麻烦并提示工作效率

时间: 2024-11-29 08:32:58

Shell基础知识和编程规范的相关文章

C++必备基础知识和编程规范

C语言是面向过程的程序设计,强调程序的执行顺序,自上而下,而C++是面向对象的程序设计,将程序看做多个对象组成,每个对象有自己的属性(变量)和行为(函数). 2.属性是描述对象特征的数据,行为是对象能进行的操作,如英雄联盟里每一个英雄都有自己的属性(生命值,法力值,防御力,攻击力)和行为(普通攻击,施放技能QWER). C++编程规范: 类名第一个单词大写,数据成员和变量小写: 成员函数第二个单词首字母大写: 成员函数类外定义,类内声明: Set和构造函数的参数与数据同名,用this访问: 一.

【Linux系列】【基础版】第三章 Shell基础知识

3. Shell基础知识     3.1 Shell的由来         3.1.1 Bourne Agin Shell         3.1.2 其他的shell, 有 zsh, ksh等     3.2 查看有没有shell         3.2.1 yum list | grep zsh         3.2.2 ls /root/.bash_history         3.2.3 echo $HISTSIZE -> vi /etc/profile 修改HISTSIZE的值 -

centos shell基础知识 2015-4-8 第十二节课

centos shell基础知识  2015-4-8 第十二节课 上半节课 下半节课 history:命令历史 ,默认保存1000条命令历史 !!:上一条命令 !$:上一条命令的最后一个参数 !n:执行命令历史里的第n条命令 !字符:最近那个字符的命令 Tab 键可以补全文件路径或者命令alias a=“b” unalias a通配符 *匹配零个或多个字符 ?匹配一个字符输入输出重定向 >, >>, <, 2>, 2>>管道符 |作业控制 ctrl+z, jobs

计算机基础知识对编程的重要性

码农和架构师的差别在哪里 从题目看文章,大家的第一想法是本篇文章是一篇讲述计算机基础知识和编程之间的关系,但是为什么开篇是这样的呢?当然这样的开篇并没有多大的意义,唯一的目的就是吸引读者而已. 纵观计算机专业的学生在毕业之后大多数会走向编写程序的道路,当然也会有部分同学有自己更感兴趣的事情,从而在毕业之后选择其他的职业.在这里根据我个人在毕业之后的编写程序的道路,写下一点总结,希望能和大家交流,有什么不对的地方,希望大家能给我指正,因为我个人觉得"三人行必有我师"是一句很有道理的话,每

shell基础知识讲解

第1章 shell基础 1.1 什么叫做shell编程 shell编程也叫做bash高级编程语法 1.2 常见的shell命令解释器 bash????????????redhat和centos使用 dsh????????????Ubuntu使用 csh和tcsh????unix使用 1.3 开发语言程序代码的分类说明 编译型????????????写完后需要编译才可以运行(C语言,java语言) 解释型????????????写完就可以直接运行(shell语言) 1.4 脚本规范 1.4.1 书

Linux操作系统基础解析之(七)——Bash(Shell)基础知识(1)

在日常交际英语中,Shell可以翻译成壳,大多指能够对内部核心起到保护作用的一种装置或结构.在计算机科学中,shell其实是指:为操作者提供的.能够通过系统调用或库调用使用整个计算机资源的访问接口. 它既是一种命令解析器又是一种程序设计语言.作为命令解析器,它可以解释和执行用户输入的命令,也可以自动地解释和执行预先编写好并保存在某个文本文件中的一系列的命令:作为程序设计语言,shell特别定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和条件分支,让我们可以像使用高级语言

shell基础知识总结

1. shell 对于一台计算机而言,其硬件受系统内核的控制,使用者想要控制计算机,就必须有与系统内核进行通讯的手段.而shell就是使用者与计算机进行通讯的手段之一.从命名上看,shell其实是相对于kernel(内核)而言,指系统与外界(使用者)进行接触的部分,一个提供系统功能给用户使用的软件,它接受来自用户的指令,然后调用相应的应用程序. 为了满足不同的需求,shell提供了两种执行命令方式: a. 交互式:解释并执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令. b. 程序

编程基础知识分享——编程开始之前

对我来说,编程这件事与其说是工作,不如说是兴趣.尽管和自己理想中的编程比,自己的所谓编程只不过是小打小闹,但是现在又有多少所谓的IT从业者是做真正的编程?产业化的今天,其实真的没有必要区分所谓的程序员和码农,每个人的路线和生活都不相同,也不可能相同,有人学编程只是为了一份工作,有人纯粹为了爱好.我的理解,无论出发点如何,只要尊重自己的选择,能够有所收获就够了. 这系列文章,是自己当初学习编程的一些方法和经验,整理了一下,可以分成几块记录.对于专业的程序员,我的经验并不适合,一些计算机专业出身的朋

Shell 基础知识和总结

调试脚本 检查脚本语法错误 bash -n /path/to/some_script 调试执行 bash -x /path/to/some_script shell里的变量 本地变量:只对当前shell有效:作用范围可以是整个shell程序文件,包括脚本中的函数,对其他的shell无效.    环境变量:对当前shell及子进程shell有效.    声明.赋值:export name=value 或者 declare -x name=value    局部变量:与函数的生命周期一样: