shell视频讲解

编程语言:

  • 机器语言

  • 汇编语言

  • 高级语言

高级语言:

  • 静态语言:编译型语言,有一个程序开发环境,不需要借助特定的二进制程序,写完代码需要一个编译器将其直接转换成二进制可以独立运行的。通常都是强类型的语言,强类型通常指的都是变量类型。关键字能直接被编译器转换成二进制码。程序在执行之前就要完全转换成二进制码。(事先转换成可执行格式)
    • c语言、c++、JAVA、c#
    • 强类型:变量在使用前,必须事先声明,甚至还要初始化
  • 动态语言:解释性语言,通常都是弱类型语言。程序只有在一条一条执行的时候才进行转换成二进制码。(边解释边执行)
    • Python、ASP、PHP、shell、perl
    • 弱类型:变量随用随声明,甚至不区分类型。(默认存储都是字符串)

解释器通常都是静态语言开发的

面向对象和面向过程:

面向过程(shell、c):把编程立足点主要在于问题解决的过程本身

面向对象(JAVA、Python):把实现的项目抽象成一个一个的对象,并且定义对象之间的动作来完成的。

变量:内存空间,使用变量名来引用变量的时候叫命名的内存空间

内存是编址的存储单元,每一个字节都有一个全局唯一的地址(物理内存)来找到它。

变量:

存储字符10和存储数值10有什么不同:

字符10:两个ASCⅡ码,一个ASCⅡ占8位,两个占16位。

数值10:转换成二进制位1010,但是最小存储单位是8位。所以就有了变量类型。

常见的变量类型:事先确定数据的存储格式和长度

  • 字符型:

  • 数值型:

    • 整形:
    • 浮点型:
  • 布尔型

bash变量类型:

环境变量:作用域为当前shell进程及其子进程,使用export关键字,重开一个则无效

本地变量(局部变量):本地变量:作用于为当前代码段、局部变量:作用域为当前代码段

[root@localhost ~]# name=lxw
[root@localhost ~]# echo $name
lxw
[root@localhost ~]# bash—————>上一个 shell的子shell,
不同的shell是两个不同的进程,父shell中命令的变量在子shell中用不了。
[root@localhost ~]# echo $name

引用变量:引用变量要使用{},只不过{}有时候可以省略不写

[root@localhost ~]# echo $name
lxw
[root@localhost ~]# echo "$names ymy"
 ymy
[root@localhost ~]# echo "${name}s ymy"
lxws ymy

位置变量:$1,$2…

特殊变量: ? , ?, #…

&> 同时重定向

撤销变量:unset 变量名

查看变量:set(包括环境变量和本地变量)

​ env/printenv/export(查看环境变量)

给变量添加新值:

[root@localhost ~]# animals=pig
[root@localhost ~]# animals=$animals:goat
[root@localhost ~]# animals=$animals,sheep
[root@localhost ~]# echo $animals
pig:goat,sheep
export	PATH=$PATH:/usr/local/apache/bin

脚本是什么:脚本就是程序的源代码,通常就是命令的堆砌。

直接写在脚本中的命令不能直接运行:因为Linux内核只认识ELF文件格式,而我们写完的只是ASC码格式。

shebang:指定程序的魔数,必须以#!开头,后边跟上解释器路径。

脚本不能直接执行:要么把当前路径添加到PATH环境变量中,然后执行该脚本,要么给脚本文件添加x权限,写清楚脚本文件的绝对路径,然后执行该脚本

条件测试类型:

整数测试:$a是否等于6等等

字符测试:某一个字符串中的字符是不是abcd

文件测试:判断一个文件是否存在

变量名称:只能包含字母、数字、下划线,并且不能以下划线开头,不能跟系统中已有的环境变量重名,最好做到见名知意。

命令间的逻辑关系:

逻辑与:&& 有假为假

第一个条件为假时,第二个条件不用再判断,最终结果已经有显示

第一个条件为真,第二个条件必须在判断,最终结果取决于第二条件

逻辑或:|| 有真为真

条件判断:

单分支的if语句

if 判断条件;then

fi

双分支的if语句:

if 判断条件;then

。。。

else

​ 。。。

fi

在这里插入图片描述

要是想引用这个命令的执行状态结果返回值,一定不能给这个命令加引号。

引用命令的执行结果,可以给命令加反引号

#!/bin/bash
grep "\<bash$" /etc/passwd &> /dev/null------>引用命令执行状态结果,不能加引号
RETVAL=$?
if [ $RETVAL -eq 0 ];then
	USER= `grep "\<bash$" /etc/passwd |wc -l`------>引用命令执行结果,要加引号
else
	echo "no such user."
fi

空白行: /^$/

shell中如何进行算术运算:

A=3 B=6

1、let 算数运算表达式

let C=A+B

2、$ [ 算术表达式 ]

C=$ [ A + A+ B]

3、$(( 算术表达式))

C= ( ( (( A+$B))

4、expr 算数运算表达式,表达式中各操作及运算符之间要有空格,而且要使用命令引用

C=` expr $A + $B ``——————(一个反引号)

提前结束脚本进程命令:exit (0-255)——>用于定义程序执行状态结果,不定义则将exit前一句的命令执行状态结果作为整个脚本的命令执行结果。

USERNAME=user1

if ! grep “^$USERNAME\ >” /etc/passwd &>/dev/null;then

​ echo “no such”

测试的表达式:

[ expression ] :命令测试法(bash的命令)

[[ expression ]]:关键字测试法(bash的关键字)

test expression:

测试两个数是否相等,以下方法都行
INT1=63

INT2=77

[ $INT1 -eq $INT2 ]

[[ $INT1 -eq $INT2 ]]

test	$INT1	-eq	$INT2

if((0==4%2)) 小括号
if [[ 0 -eq 4%2 ]] 中括号

if	[ `grep "^USERNAME\" /etc/passwd`	-eq 0];then
此时不能使用中括号,因为grep命令执行下来是一行或者多行的筛选结果,是程序执行结果,并不是程序执行状态结果。
if	[ `grep "^USERNAME\" /etc/passwd |cut -d: -f3`	-eq 0];then
这个可以,因为该命令执行完是判断用户的ID号是否为0。

bash中常用的条件测试有三种:整数测试、文件测试、

整数比较:

只有在进行整数测试的时候才必须用中括号

-eq(equal):测试两个整数是否相等,相等为真,不等为假

-ne(no equal):测试两个整数是否不等。不等为真,相等为假

-gt(great than):测试一个数是否大于另一个数,大于为真,否则为假

-lt(less than):小于为真,否则为假

-ge:大于或等于

-lt:小于或等于

shell中会进行圆整运算:就是小数点后的数字全部丢弃,不管其大小。

文件测试:

1、测试文件是否存在:

-e file:测试文件是否存在

[ -e  /etc/inittab ]

-f file:测试文件是否为普通文件

-d file:测试文件是否为目录文件

-r file:测试当前文件对当前用户来讲是否可读

[ -x  /etc/rc.d.sysinit ]

-w file:测试当前文件对当前用户来讲是否可写

-x file:测试当前文件对当前用户来讲是否可执行

 [ -e /etc/inittab ]  && echo "存在" ||  echo "不存在"
发布了28 篇原创文章 · 获赞 6 · 访问量 577

猜你喜欢

转载自blog.csdn.net/qq_42508901/article/details/104109568
今日推荐