Shell-03 编程原理

  1. 编程介绍

最开始的编程 机械码(16进制)—CPU会识别

计算机只能识别二进制指令 程序 = 指令 + 数据

驱动:

硬件默认是不能使用的 驱动程序----不同的厂家硬件设备之间需要进行指令沟通,需要驱动程序来进行“翻译”;更趋近于硬件的开发工程师,要学习“汇编语言”;而“汇编语言”被厂家所限制;

底层语言:C语言和C++ 汇编语言

操作系统:分配硬件资源来进行进程管理

现在的编程是基于高级语言,以及超高级语言,更好的是让程序员能够实现编程功能

CPU控制硬件

编程语言的分类:

高级语言、以及超高级语言需要翻译成计算机可读的语言(二进制指令)

解释型:shell语言 python  perl(logo是骆驼)

逐行翻译,逐行执行---解释一行执行一行

Bash –x 逐行执行并显示(默认也是逐行执行)

Bash –x filename.sh

编译型:C语言 C++ C#

一次编译,全部执行

Java即是编译型也是解释型

根据服务重心的不同分为面向过程编程和面向对象编程

面向过程  侧重于指令

面向对象  侧重于数据的编程语言 对象是数据

编程语言的执行方式:

【一行一行执行】

(1)      顺序执行 依次执行,依次翻译

(2)      循环执行 for(遍历) while(循环条件) unitl(和while相反,false进入循环)

(3)      选择执行—分支结构 if  case

函数递归-----算阶乘

  1. shell脚本语言编程

(1)      逻辑关系

添加用户test到test10

for I in $seq(1,10);do

user=test$i

pwd=`123456`

p=cat /etc/passwd | grep “$user” &> /dev/null

if [$? –eq 0 ];then

echo “存在”

else

useradd $user6

echo “123456” | passwd –stdin “$user” &> /dev/null

fi

done

如上一种判断条件是有问题的,修改如下图所示:

但是,在接收参数时,$i只代表了100,所以用$*代替,如下图所示:

罗塞塔石碑-----------一种美国多媒体语言教学软件

3.Shell语句介绍

(1)Shell语句是面向过程的,侧重于指令集;

优点:调用os(操作系统)的命令行,来实现所有功能,执行效率高

缺点:没有库调用(区分python,python可以调用各种模块接口)

(2)Shell语句的基本结构组成:

命令----基础

每天备份一次/etc目录下的所有文件  脚本

date=`date +%F`

if [ -f /tmp/${date}etc.bak ];then

tar czf /tmp/${date}etc.bak /etc/

fi

数据----变量----(全局变量、局部变量、本地变量、传参)

/etc/profile----环境变量/全局变量

export

逻辑关系

Shell脚本的第一句话!!!!!!!!!!(必须写)

#!/bin/bash-------定义脚本解释器

#!-----shebang符号

/init----读取运行级别

蓝色链接文件(链接到执行文件上)  绿色执行文件

Chkconfig----控制开机启动

/etc/shells------查看当前系统支持的shell程序

/sbin/nologin----虚拟用户用来跑服务

1-499是虚拟用户 0 root 500以后是普通用户

echo $SHELL –--查看当前会话的shell程序

/etc/passwd ----制定了用户默认支持的shell程序(/sbin/nologin)

Shell的执行:

(1)Bash命令来执行脚本

-n----查看shell脚本的逻辑错误(注意:单词写错是不管的)

-x----逐行显示执行的脚本程序(方便排除错误)

(2)授权 chmod u+x filename.sh

使用全路径执行脚本即可

4.变量

$HOME 环境变量

局部变量 declare—定义变量类型 变量是命名的内存空间,用来存储数据

本地变量 local在函数中使用,只在函数之中有效

变量类型:

数值型:

整型:int在shell脚本中尽量不要进行较大的整型运算,否则会出现数值溢出

浮点型 float

布尔值 1/0(真/假)true/false

字符串:

普通字符及字符串

数组

基于字符串的类型的编程语言的分类:

强类型语言---数值必须被定义才可以可以进行处理或运算

弱类型语言---例如python,编程语言可以自动识别变量类型

【*多态*】一个数据具有多种属性,最后使用的属性取决于最后和它运算的数据

传参

$? ---- 上一条命令的执行状态 0正确 1-255错误

$1 $2 … ${10} ------ 命令后面传入脚本的数据,以空格为分隔符

$# -------- 统计传参数量 ${$#} ---- 取该条命令的最后一个传递的参数

$* -------- 表示所有传参,所有的传参以字符串的形式输出

$@ ------- 表示所有的传参,所有的传参以列表的形式输出

【工作中要对所有的传参进行操作的时候,就要考虑$*和$@】

定义变量格式:    一个等号叫赋值,两个等号相当于-eq

NAME=VALUE   shell脚本中不要敲空格

declare---定义变量类型 -i----定义变量为整数

-a-----数组

-l---大写转换小写

-r---只读

变量命名:

  1. 下划线的方式指定变量名称
  2. 驼峰命名方式

5.test文件测试、条件判断

在脚本中,我们需要进行语句的分支;说白了就要进行判断,判断基于要使用test

test使用格式:

  1. test [option] file
  2. [ 条件语句 ]----前后有空格

常见的test选项:

  1. 比较选项

-eq 等于

-ne 不等于

-gt 大于

-ge 大于等于

-lt  小于

-le  小于等于

2.判断选项

-f  判断是否为普通文件

-d  判断是否为目录文件

-L  判断是否为链接文件

-r -w -x --- 判断文件是否具有读写执行权限

3.关联选向

-o 或

-a 与

!  非

4.字符串判断

= 判断两边的字符串是否相等 -eq是判断数值是否相等

!= 不等于

-z 判断字符串长度是否为0,长度为0是假;换种说法,判断字符串是否存在

-n 和-z相反 存在为假 不存在为真

5.逻辑运算

与 && 两边的命令都为真结果为真

或 ||  两边的命令一边为真就是真 同时为假就是假

非 !=

这个逻辑运算符,前后对接的都是单独存在的命令;

[ $? -eq 0 ] && exit 0 || exit 1

6.算术运算

let 1+1 let i++

expr 1*1

$[$1 + 10]

$(($1/$2))

+ - * / %

**(幂)

Shell-03的更多相关文章

  1. shell中的输入输出和编程中的变量(shell 03)

    shell中的输入输出标准输入:键盘标准输出:终端显示器>> 追加是换行追加的echo -n 不尾随换行符 -e 启用解释反斜杠的转义功能 -E 禁用解释反斜杠的转义功能(默认) --he ...

  2. Shell 03 for while case 函数 中断及退出

    一.for循环 1.脚本1,通过循环批量显示5个hello world    ( in 1 2 3 4 5 ) 2.脚本2,通过循环批量显示10个hello world   ( in {1..10} ...

  3. Linux Shell 03 条件测试

    条件测试 方式一:在Bash中 test命令和[]是等价的. test命令: if test $n1 -eq $n2 then echo "The two number are equal& ...

  4. UPX3.03+UpolyX.5 Shell v1.0 汉化绿色版

    软件名称:UPX3.03+UpolyX.5 Shell v1.0 汉化绿色版软件类别:汉化软件运行环境:Windows软件语言:简体中文授权方式:免费版软件大小:635 KB软件等级:整理时间:201 ...

  5. Linux - 简明Shell编程03 - 字符串(String)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash str="Shell ...

  6. Shell - 简明Shell入门03 - 字符串(String)

    示例脚本及注释 #!/bin/bash str="Shell" str2="Hello $str !" str3="Hello ${str} !&qu ...

  7. 【转】shell 教程——03 Shell脚本语言与编译型语言的差异

    大体上,可以将程序设计语言可以分为两类:编译型语言和解释型语言. 编译型语言 很多传统的程序设计语言,例如Fortran.Ada.Pascal.C.C++和Java,都是编译型语言.这类语言需要预先将 ...

  8. Python调用C可执行程序(subprocess) 分类: python 服务器搭建 C/C++ shell 2015-04-13 21:03 87人阅读 评论(0) 收藏

    从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spawn.os.popen.popen2.commands. ...

  9. Linux08--Shell程序设计03 shell script

    第一个Shell脚本——HelloWorld [root@localhost ~]# vi sh01.sh #!/bin/bash #!表明使用哪种shell # this is my first s ...

  10. [2019.03.20]Linux Shell 执行传参数和expr

    前不久入职实习生,现在在帮着组里面dalao们跑Case,时不时要上去收一下有木有Dump,每次敲命令太烦人于是逼着自己学写Shell脚本.一开始真的是很痛苦啊,也没能搞到书,只能凭网上半真半假的消息 ...

随机推荐

  1. 正则的?:pattern, ?=pattern, ?!pattern学习整理

    真正学习这次正则知识前,我是被这道题给难住了: # 目标文本 str1 = "ever1, ever2, never1, never2, never3, forever1, forever2 ...

  2. 获取fork+exec启动的程序的PID值

    问题背景     业务中有个场景需要自动起一个A程序(由于A程序与 sublime_text 启动后遇到的问题有相似之处,后文就用 sublime_text 来替代A程序,当A程序与 sublime_ ...

  3. Docker Toolbox虚拟机文件地址修改 以及镜像加速

    Docker Toolbox虚拟机文件地址修改  默认情况下,docker-machine创建的虚拟机文件,是保存在C盘的C:\Users\用户名\.docker\machine\machines\d ...

  4. gcc 消除未使用变量的警告

    我们写代码的时候经常需要遇到一些情况,参数暂时没用到.但是这个参数必须存在. 例如linux下线程实体函数void *thread_xx(void *arg)如果不处理,gcc编译时就会报" ...

  5. 【7.24校内交流赛】T1&T2

    T1: 一个脑洞很大的题,将输入的所有数异或起来输出就好了: (话说我为什么这么喜欢用异或啊) #include<bits/stdc++.h> using namespace std; i ...

  6. Java中的sort

    Java中对集合排序有两种方式 Comparable和Comparator public static <T> void sort(List<T> list); 将集合中的数据 ...

  7. 编写的Java第一个程序

    没什么好介绍的,嘻嘻 package head; public class ee { public static void main(String[] args) { System.out.print ...

  8. 卸载OpenIV

    最近把 GTA5 卸载了,于是也想把用来修改 MOD 的 OpenIV 也卸载了. 结果在设置中,进行卸载的时候,弹出这个窗口 解决方案 1.首先打开 文件所在位置 2.右键,选择 属性,打开文件所在 ...

  9. Redis---键的过期时间及数据淘汰策略

    5.键的过期时间   Redis可以为每个键设置过期时间,当键过期时,会自动删除该键.   对于散列表这种容器,只能为整个键设置过期时间(整个散列表),而不能为键里面的单个元素设置过期时间. 6.数据 ...

  10. [VINS]IMU与相机之间旋转量的标定

    VINS-Mono[1]中IMU-Camera外参旋转量\(R_b^c\)的计算方法在他们实验室发的之前的论文有详细讲解[2].视觉利用匹配特征点中的基础矩阵求出相机坐标系下两帧的旋转量\(R_{c_ ...