一,Shell环境查看

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

方法一

[root@linux-node1 ~]# echo $SHELL
/bin/bash

方法二

[root@linux-node1 ~]# grep root /etc/passwd
root:x:::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的软连接

[root@linux-node1 ~]# ll /bin/sh
lrwxrwxrwx. root root Aug /bin/sh -> bash
2.3 查看系统版本
[root@linux-node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.2. (Core)

查看bash版本

[root@linux-node1 ~]# bash --version
GNU bash, version 4.2.()-release (x86_64-redhat-linux-gnu)
Copyright (C) Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 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了

[root@xiewenming]# bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 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.
[root@xiewenming]#
[root@xiewenming]# env x='() { :;}; echo be careful' bash -c "echo this is a test"
be careful
this is a test
2.4 升级bash方法
[root@xiewenming]# yum -y update bash
[root@xiewenming]# rpm -qa bash
bash-4.1.-.el6.x86_64
[root@xiewenming]# 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 脚本名 (推荐使用)

[root@linux-node1 ~]# bash test01.sh
Welcome warren
[root@linux-node1 ~]# sh test01.sh
Welcome warren

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

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

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

[root@linux-node1 ~]# source test01.sh
Welcome warren
[root@linux-node1 ~]# . test01.sh
Welcome warren

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

[root@linux-node1 ~]# cat test01.sh
echo "Welcome warren"
[root@linux-node1 ~]# sh < test01.sh
Welcome warren
[root@linux-node1 ~]# cat test01.sh |bash
Welcome warren

使用cat 创建脚本文件

[root@linux-node1 ~]# cat > test02.sh
echo "this is test"

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

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

[root@linux-node1 ~]# cat test.sh
user001=`whoami`
[root@linux-node1 ~]# echo $user001
#空
[root@linux-node1 ~]#

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

[root@linux-node1 ~]# source  test.sh
[root@linux-node1 ~]# echo $user001
root

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

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

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

#!/bin/bash

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

#!/bin/bash
#Date: --
#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). 变量名称应该具有相关意思,不能太随便。

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

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

  1. Linux Shell 基础知识(一)

    1. 本文知识结构 2. shell 基础知识 2.1 shell 简单介绍 ​ GNU bash shell 能提供对 Linux 系统的交互式访问,一般来说,使用快捷键 Ctrl + Alt + ...

  2. Linux shell基础知识(上)

    Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...

  3. shell基础知识讲解

    第1章 shell基础 1.1 什么叫做shell编程 shell编程也叫做bash高级编程语法 1.2 常见的shell命令解释器 bash            redhat和centos使用 d ...

  4. Shell 基础知识和总结

    调试脚本 检查脚本语法错误 bash -n /path/to/some_script 调试执行 bash -x /path/to/some_script shell里的变量 本地变量:只对当前shel ...

  5. shell基础知识总结

    1. shell 对于一台计算机而言,其硬件受系统内核的控制,使用者想要控制计算机,就必须有与系统内核进行通讯的手段.而shell就是使用者与计算机进行通讯的手段之一.从命名上看,shell其实是相对 ...

  6. shell基础知识---与监听服务器长连接端口状态

    从未写过脚本我的最近接了俩脚本的需求,就在这分享一下我的我学到基础知识主要就四部分内容 一.变量 变量的定义 string='字符串' string="字符串" num=808st ...

  7. shell基础知识

    Shell 学习基础 1.组合命令的符号 管道,将前面一个命令的结果作为后面一个命令的输入 分号,顺序执行用分号分割的命令 重定向,重定向包括三种:输入重定向.输出重定向.错误重定向,以7个不同的符号 ...

  8. java基础知识——网络编程、IO流

    IO流 字节流:处理字节数据的流对象,计算机中最小数据单元就是字节.InputStream OutputStream 字符流:字符编码问题,将字节流和编码表封装成对象就是字符流.Reader Writ ...

  9. shell从入门到精通进阶之一:Shell基础知识

    1.1 简介 Shell是一个C语言编写的脚本语言,它是用户与Linux的桥梁,用户输入命令交给Shell处理,Shell将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户. 下面是处 ...

随机推荐

  1. nginx 域名绑定 域名, nginx 域名绑定 端口

    一.nginx 域名绑定 域名 nginx绑定多个域名可又把多个域名规则写一个配置文件里,也可又分别建立多个域名配置文件,我一般为了管理方便,每个域名建一个文件,有些同类域名也可又写在一个总的配置文件 ...

  2. CSS文字换行详细解说

    本文列举了兼容 IE 和 FF 地换行 CSS 推荐样式,详细介绍了word-wrap同word-break地区别.兼容 IE 和 FF 地换行 CSS 推荐样式: 最好地方式是 word-wrap: ...

  3. 一个常见下拉菜单的样式:一体化小三角(纯css手写解决)

    类似下拉菜单2个一体化小三角,习惯上用字体图标加jQuery处理,比较方便,但是下面纯css手写解决方式,效果也还不错,对CSS知识也是一个比较好的孔固. 小三角用了2种不同处理方式:1.利用bord ...

  4. IIS6.0支持PHP设置

    找到了一份兼职,做网站的,但是公司里面服务器是用的IIS,Win2003系统,而且以前的网站都是aspx的.老板是我们学校的一个老师,我是被学长推荐过去了. --------------------- ...

  5. cognos report上钻下钻报表处理方法(2)

    在此之前已经说过了在报表本身单个维度上面的上钻与下钻,本次说的是传递参数追溯到其他报表.比如从部门追溯到部门每一位员工的数据分析, 如图:报表1 点击信托业务一总部跳转到下面的报表2,显示每一位执行经 ...

  6. google/protobuf/releases/tag/v3.4.0 下载

    Protocol Buffers v3.4.0 Downloads 4.07 MB protobuf-cpp-3.4.0.tar.gz 5.02 MB protobuf-cpp-3.4.0.zip 4 ...

  7. shell常用调试方法

    检查语法 -n选项只做语法检查,而不执行脚本. sh -n script_name.sh 启动调试 sh -x script_name.s 进入调试模式后,Shell依次执行读入的语句,产生的输出中有 ...

  8. jdbc详解(一)

    JDBC简介 l 数据库驱动 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC l JDBC 全称为: Java Data Base Connectivity ...

  9. SQL:1999基本语法(学习笔记)

    SQL:1999基本语法 SELECT [DISTINCT] * | 列名称 [AS]别名,........ FROM 表名称1 [别名1][CROSS JOIN表名称2 别名2]| [NATURAL ...

  10. oracle 快速备份表数据

      oracle 快速备份表数据 CreateTime--2018年2月28日17:04:50 Author:Marydon UpdateTime--2017年1月20日11:45:07 1.1.9. ...