一些关于自己对于shell的理解,希望大家可以补充留言

shell脚本

编程语言介绍

编程语言是指计算机能理解的语言,人类通过使用计算机语言可以给计算机批量下达任务,让其按照人类的思想去完成工作。

最常见的语言有:汇编语言、C语言、java语言、php语言、Python语言、golang语言等等。

编程语言分类:

  • 编译型语言 程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++、java、Golang等

  • 解释型语言 程序不需要编译,程序在运行时由解释器翻译成机器语言,每执行一次都要翻译一次。因此效率比较低。比如Python/JavaScript/ Perl /ruby/Shell等都是解释型语言。

shell介绍

是一个程序,采用C语言编写,它既是一种命令语言,又是一种解释性的编程语言。

用途:

重点:重复性的工作,全部通过脚本来完成。高效的同时还不出错。

秘诀

学习脚本的秘诀: 多看(看懂)——>多模仿(多练)——>多思考

Bash shell

命令和文件自动补全

Tab只能补全命令和文件

常见的快捷键—提升操作熟练度

 Ctrl+c    终止前台运行的程序
 Ctrl+z    将前台运行的程序挂起到后台
 Ctrl+d    退出 等价exit
 Ctrl+l    清屏 
 Ctrl+a |home   光标移到命令行的最前端
 Ctrl+e |end   光标移到命令行的后端
 Ctrl+u    删除光标前所有字符
 Ctrl+k    删除光标后所有字符
 Ctrl+r   搜索历史命令

shell脚本语法

脚本命名

脚本的扩展名为.sh

名字不要太长,在26个字节内

脚本代码

#!/bin/bash

在脚本的第一行

#! 为魔法字符,指定脚本代码执行的程序,告诉系统使用哪一种shell

 //以下内容是对脚本的基本信息的描述,大家可以根据实际情况尽可能的写详细一些,方便后续使用者
 # Name: 脚本名字
 # Desc:描述describe
 # Path:存放路径
 # Usage:用法
 # Update:更新时间
 # Author:作者
 # Release: 分发版本

命令式脚本执行方法:

 定义命令路径变量  PATH
 PATH=$PATH:脚本路径

备注:脚本必须给执行权限

变量

定义

变量就是一个可以变得值

变量的格式为:变量名=值

shell中定义变量时,=的前后不能出现空格,否则会报错

变量的举例

 var=1  age=18    整形变量
 name='zuojie'   字符串变量
 score=88.8      浮点型变量

输出变量echo

在文本中输入 echo 变量名

 name="hujinwen"
 echo  $name  
 hujinwen

取消变量unset

使用 unset 变量名 即可取消掉变量名

 name=huujinwen
 unset name
 echo $name
 这里显示的是空白

有类型变量 declare

使用declare -i 即可将变量看成是一个整数

 declare -i name='hujinwen'
 echo $name
 0

使用declare -r 即可将一个变量变为只读状态

注意:非必要不要设置只读,只读变量通常为不可变变量

 declare -r name

变量的分类

本地变量

通常为用户自己设置的变量,一般在脚本执行一次,或者终端结束后就会消失

基本上就是我们在当前的终端输入的变量

环境变量

通常这种变量基本都存放在 /etc/profile 中

查看当前用户的环境变量 env

查询当前用户的所有变量(临时变量与环境变量) set

export 将一个自己设置的变量变为环境变量

定义一个临时变量

 export name=hujinwen
 ​
 查看自己设置的环境变量
 env | grep ^ name
 ​
 name=hujinwen

定义一个永久生效的变量

需要进入配置文件中去添加变量

vim /etc/profile 或者 ~/.bashrc

全局变量

使用export命令将本地变量输出为当前shell中的环境变量 所有用户及shell都可以使用,可以在/etc/profile /etc/bashrc下永久定义

内置变量

系统变量(内置bash中变量) : shell本身已经固定好了它的名字和作用

变量取值

echo $变量名

即可读取变量

注意

 变量读取过程中,默认单引号是不解释变量的.比如
 [root@zuolaoshi ~]# echo '$name'
 $name
 ​
 如果必须使用单引号还要读取变量的值可以使用eval命令[重新运算求出参数的内容] 
 [root@zuolaoshi ~]# eval  echo '$name'
 zj

其他变量

1.目录或者文件提取变量

name=/etc/yum.repos.d/yum.repo

 取出目录
 dirname $name
 结果:/etc/yum.repos.d
 ​
 取出文件
 basename $name
 结果:yum.repo

2.变量内容中的删除和替换

一个“%”代表从右往左去掉一个/key/

两个“%%”代表从右往左最大去掉/key/

一个“#”代表从左往右去掉一个/key/

两个“##”代表从左往右最大去掉/key/

shell格式化输出

echo

转义字符

\a 发出警告声;

\b 删除前一个字符;

\t 插入tab;

\n 换行且光标移至行首;

\c 最后不加上换行符号;

\f 换行但光标仍旧停留在原来的位置;

\r 光标移至行首,但不换行;

\v 与\f相同;

\ 插入\字符;

\0nnn 打印nnn(八进制)所代表的ASCII字符; 备注:数字0 不要理解成字母o

\xNN 打印NN(十六进制)所代表的ASCII字符;

输出颜色字体

脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e

其中41的位置代表底色, 36m的位置是代表字的颜色

1、字背景颜色和文字颜色之间是英文的

2、文字颜色后面有个m

3、字符串前后可以没有空格,如果有的话,输出也是同样有空格

 下面是相应的字和背景颜色,可以自己来尝试找出不同颜色搭配
 ​
   例
   echo -e “\033[31m 红色字 \033[0m”
   echo -e “\033[34m 黄色字 \033[0m”
   echo -e “\033[41;33m 红底黄字 \033[0m”
   echo -e “\033[41;37m 红底白字 \033[0m”
 ​
 字颜色:30—–37
   echo -e “\033[30m 黑色字 \033[0m”
   echo -e “\033[31m 红色字 \033[0m”
   echo -e “\033[32m 绿色字 \033[0m”
   echo -e “\033[33m 黄色字 \033[0m”
   echo -e “\033[34m 蓝色字 \033[0m”
   echo -e “\033[35m 紫色字 \033[0m”
   echo -e “\033[36m 天蓝字 \033[0m”
   echo -e “\033[37m 白色字 \033[0m”
 ​
 ​
 字背景颜色范围:40—–47
   echo -e “\033[40;37m 黑底白字 \033[0m”
   echo -e “\033[41;37m 红底白字 \033[0m”
   echo -e “\033[42;37m 绿底白字 \033[0m”
   echo -e “\033[43;37m 黄底白字 \033[0m”
   echo -e “\033[44;37m 蓝底白字 \033[0m”
   echo -e “\033[45;37m 紫底白字 \033[0m”
   echo -e “\033[46;37m 天蓝底白字 \033[0m”
   echo -e “\033[47;30m 白底黑字 \033[0m”
 ​
 最后面控制选项说明
   \033[0m 关闭所有属性
   \033[1m 设置高亮度
   \033[4m 下划线
   \033[5m 闪烁
   \033[7m 反显
   \033[8m 消隐
 ​
   \033[30m — \33[37m 
 ​
 设置前景色
   \033[40m — \33[47m 设置背景色
 ​
 ​
   \033[nA 光标上移n行
   \033[nB 光标下移n行
   \033[nC 光标右移n行
   \033[nD 光标左移n行
   \033[y;xH设置光标位置
   \033[2J 清屏
   \033[K 清除从光标到行尾的内容
   \33[s 保存光标位置
   \033[u 恢复光标位置
   \033[?25l 隐藏光标
   \033[?25h 显示光标

shell解释器

java 需要虚拟机解释器, 同理 shell 脚本也需要解析器,如下所示:

 [root@node01 shells] cat /etc/shells
 /bin/sh
 /bin/bash
 /sbin/nologin
 /bin/dash
 /bin/tcsh
 /bin/csh

执行shell脚本

执行方式一
 /bin/sh 01.sh
 hello world

 /bin/bash 01.sh
 hello world

bash和sh是什么关系:sh是bash的快捷方式

执行方式二

方式一的简化方式:

 [root@node01 shells] bash hello.sh
 hello world
 ​
 [root@node01 shells] sh hello.sh
 hello world
执行方式三
 ./文件名
 [root@node01 shells] ./hello.sh
 -bash: ./01.sh: 权限不够

如果权限不足,则需要使用chmod去给文件执行的权限

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值