一、了解bash shell

/etc/bash是Linux系统预设的shell.bash是GNU计划中重要的工具软件之一,目前也是Linux distributions的标准
shell。

Shell:(壳):交互式环境中我们所用到的一个界面,很多时候也被称作是编译器
shell可分为两大类(基于linux的系统):
Text base:基于文字的
                        sh csh ksh bash tcsh zsh
Graphic base:基于图形界面的
                         KDE、GNOME、Xface

bash工作模式:
    互动模式(interactive mode),需要有输入设备传递shell
    shell scripts模式(non-interactive mode)把执行命令写入到文件中,交由bash去读取和执行

1、查看当前系统上所支持的shell类型

[root@lovelace ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/ksh

2、检查shell的版本信息

[root@lovelace ~]# echo $BASH_VERSION
3.2.25(1)-release

 二、bash shell的功能
bash shell具备的功能:
1、兼容于bourne shell(sh)
2、支持许多选项及变量,可自定shell的使用环境。
3、支持历史命令功能
4、具有命令修订的能力,可重新取用或修改之前执行过的命令
5、具有工作控制的能力,可控制前台及后台的程序
6、具有程序设计的能力,支持变量,真假值判断,控制流程,函数,输入出控制,可让你设计程序已解决问题,进行系统的维护管理。
7、具有:短小精悍,可移植性强。

三、shell的种类以及bash的配置文件

站在用户登录的角度来说,shell的种类
登录式shell:
    正常通过某终端登录
    su - username
    su -l username
非登录式shell:
    su username
    图形终端下打开命令窗口
    自动执行的shell脚本

bash配置文件
全局配置:

/etc/profile

/etc/profile.d/*.sh

/ets/bashrc
个人配置:

~/.bash_profile

~/.bashrc

profile类功能:
    设定环境变量
    运行命令或脚本

bashrc类功能:
    设定本地变量
    定义命令别名

登录式shell如何读取配置文件
/etc/profile----->/etc/profile.d/*.sh------->~/.bash_profile--->~/.bashrc--->/etc/bashrc

非登录式shell如何读取配置文件
~/.bashrc--->/etc/bashrc---->/etc/profile.d/*.sh

四、优秀的shell脚本应该遵循的原则

应该包含以下基本信息
1、scripts的功能
2、scripts的版本信息
3、scripts的作者与联络方式
4、scripts的版权宣告方式
5、scripts的历史记录
6、scripts内的特殊指令,使用绝对路径来调用
7、scripts运作时需要的环境变量预先宣告预设定

8、scripts应该包含详细的注释信息,以便于查阅

后记:学习shell,个人感觉有以下几点需要注意:

1、基本功,这个需要我们长时间的积累,碰到问题,才能达到那种顺手拈来的境界。

2、进阶,你需要熟练掌握shell各种语法结构和定义,以及shell语句在什么环境下使用。

3、多看别人的优秀的脚本,(这里的优秀没有绝对的界限,哪怕整个脚本只有一个语句对你有帮助的那就是优秀的).

4、多总结,把收集到的优秀的脚本和语句吸收、整理,尽可能使其成为自己的知识体系中的一部分.

5、优化,可能一个月前你写的脚本很冗余,都是用一大堆命令堆叠起来的,而一个月后你可能使用函数重新编译先前你写的脚本,或许就可以精简到几行,

所以写过的脚本,不要认为可以完成工作就可以了(尽可能的去简化,如果你只是简单的使用,那就可以了),如果你想要写出更完美的脚本,那就尽可能去优化。

附上一列(检查当前主机所在网络中的主机存活情况):

#!/bin/bash
#Verson:0.1
#Auther:lovelace
#Pragram:This pragram is auto read network address,after that check hosts active or not in your current network,
#BUG: There are much more delay when ping unactive hosts,who can offer good ideas.
#define netwok address
netIP=`ifconfig |grep 'inet addr:' | grep Bcast|awk '{print $2}' |awk -F: '{print $2}' | cut -d '.' -f1-3`
#loop network address and check host active or not
for x in `seq 1 255`
do
#Note:ping -c--->count  -w--->deadtime  This two argument can reduce the delay time
ping -c 2  -w 1 $netIP\.$x &>/dev/null
#  sleep 2
if [ $? -eq 0 ];then
#print active host and input file to ip.txt files,
echo -e "\033[31m$netIP.$x\033[0m is active"| tee /tmp/ip.txt
fi
done
#statistics the active hosts
runnum=$(cat /tmp/ip.txt | wc -l)
#print the host active sum
echo -e "There are \033[33m$runnum hosts\033[0m  live in \033[35m$netIP.0\033[0m network."

转载于:https://blog.51cto.com/lovelace/1211087

shell学习之shell基础知识了解相关推荐

  1. Day 01嵌入式学习之Linux基础知识和命令操作

    学习嵌入式开发的随堂笔记 Day 01嵌入式学习之linux基础知识和命令操作 1.英文: read:读,r字母 write:写,w字母 execute:执行,运行,x字母 directory:目录, ...

  2. JNI学习开始篇 基础知识 数据映射及学习资料收集

    JNI学习开始篇 基础知识 数据映射及学习资料收集 JNI介绍 JNI(Java Native Interface) ,Java本地接口. 用Java去调用其他语言编写的程序,比如C或C++. JNI ...

  3. OpenCV与图像处理学习一——图像基础知识、读入、显示、保存图像、灰度转化、通道分离与合并

    OpenCV与图像处理学习一--图像基础知识.读入.显示.保存图像.灰度转化.通道分离与合并 一.图像基础知识 1.1 数字图像的概念 1.2 数字图像的应用 1.3 OpenCV介绍 二.图像属性 ...

  4. php基础教学笔记,php学习笔记:基础知识

    php学习笔记:基础知识 2.每行结尾不允许有多余的空格 3.确保文件的命名和调用大小写一致,是由于类Unix系统上面,对大小写是敏感的 4.方法名只允许由字母组成,下划线是不允许的,首字母要小写,其 ...

  5. 计算机网络基础心得体会结尾,学习《计算机网络基础知识》心得体会

    学习<计算机网络基础知识>心得体会 ... 如今已经是信息时代,作为主流信息工具的网络越来越重 要,网络是信息的载体,是人们传递感情的工具.随着信息社会 的不断发展,网络的应用将会更加广泛 ...

  6. 计算机学生要学的基础知识,中小学生应注重学习计算机的基础知识

    "知识爆炸"和"知识老化"这两大问题,不断困扰着现代教育,人们解决这一问题的良方之一,就是加强学生对基础知识的学习.近年来在中国兴起的中小学生学习计算机热,也同 ...

  7. 【学习笔记--FMCW基础知识】

    学习笔记--FMCW基础知识 前言 mmWave测距原理 mmWave区分多个物体 mmWave的距离分辨率(Range Solution) mmWave的最大测量距离 前言 由于工作原因需要了解TI ...

  8. 使用Vue3学习Vue的基础知识

    创建 Vue 应用 vue的安装有多种方式,本文只讨论基础知识,其他安装方式请自行查阅官网 https://v3.cn.vuejs.org/guide/installation.html 本文使用CD ...

  9. kpu 处理器_深度学习及 KPU 基础知识

    深度学习及 KPU 基础知识 1. 阅读完本章文档可以了解什么? 了解深度学习一些基础内容 了解 K210 内部 KPU 的特性 了解 KPU 使用过程中可能会遇到的问题,以及问题的解决方法 2. 概 ...

  10. 处理器_深度学习及 KPU 基础知识

    kpu 处理器_深度学习及 KPU 基础知识_weixin_39909212的博客-CSDN博客深度学习及 KPU 基础知识1. 阅读完本章文档可以了解什么?了解深度学习一些基础内容了解 K210 内 ...

最新文章

  1. angularjs 滑块验证码 移动端_SliderCaptcha
  2. R语言关系操作符:>、<=、!=、>=、==、
  3. 区块链将重新定义世界
  4. Flutter开发之《新锐专家之路:混合开发篇》笔记(55)
  5. JavaScript标准库系列——RegExp对象(三)
  6. linux如何修改主机名
  7. easyui使用时出现这个Uncaught TypeError: Cannot read property 'combo' of undefined
  8. Handling Errors Exceptionally Well in C++ 在C++中良好地捕获意外的错误
  9. ios pusher使用_使用.NET和Pusher构建实时评论功能
  10. Promise解决多个异步Ajax请求导致的代码嵌套问题(完美解决方案)
  11. VC2005 C++入门记
  12. vs2015社区版不支持installshield
  13. java .insert_Java StringBuffer.insert 插入字符
  14. 路由端口的限制与破解
  15. iOS麦克风运用——腾讯微博“吹一吹”
  16. [转]Cryengine渲染引擎剖析
  17. BZOJ2818 Gcd
  18. html统计表合并单元格的快捷键,excel中合并单元格的快捷键的方法及设置技巧
  19. 驾考通-小型汽车考试
  20. 用 kali 工具 apache 搭建简易网站 LAMP

热门文章

  1. WinDbg用法详解
  2. Microsoft SharePoint Server 2016 部署文档(2)
  3. 你的sql查询为什么这么慢?
  4. MySQL常见命令 [转]
  5. 在“DNS管理器”中手工增加DNS主机(A)或者别名(CNAME)记录时,出现被拒绝的错误...
  6. 八个防止浪费时间的小窍门
  7. js双等号探索(一): [] == ![]为Ture ?
  8. System V IPC
  9. 【基础练习】【拓扑排序】codevs3294 车站分级题解
  10. Android多媒体分析-通过MediaStore获取Audio信息