Shell-03
Shell-03 编程原理
- 编程介绍
最开始的编程 机械码(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
函数递归-----算阶乘
- 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---只读
变量命名:
- 下划线的方式指定变量名称
- 驼峰命名方式
5.test文件测试、条件判断
在脚本中,我们需要进行语句的分支;说白了就要进行判断,判断基于要使用test
test使用格式:
- test [option] file
- [ 条件语句 ]----前后有空格
常见的test选项:
- 比较选项
-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的更多相关文章
- shell中的输入输出和编程中的变量(shell 03)
shell中的输入输出标准输入:键盘标准输出:终端显示器>> 追加是换行追加的echo -n 不尾随换行符 -e 启用解释反斜杠的转义功能 -E 禁用解释反斜杠的转义功能(默认) --he ...
- 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} ...
- Linux Shell 03 条件测试
条件测试 方式一:在Bash中 test命令和[]是等价的. test命令: if test $n1 -eq $n2 then echo "The two number are equal& ...
- UPX3.03+UpolyX.5 Shell v1.0 汉化绿色版
软件名称:UPX3.03+UpolyX.5 Shell v1.0 汉化绿色版软件类别:汉化软件运行环境:Windows软件语言:简体中文授权方式:免费版软件大小:635 KB软件等级:整理时间:201 ...
- Linux - 简明Shell编程03 - 字符串(String)
脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash str="Shell ...
- Shell - 简明Shell入门03 - 字符串(String)
示例脚本及注释 #!/bin/bash str="Shell" str2="Hello $str !" str3="Hello ${str} !&qu ...
- 【转】shell 教程——03 Shell脚本语言与编译型语言的差异
大体上,可以将程序设计语言可以分为两类:编译型语言和解释型语言. 编译型语言 很多传统的程序设计语言,例如Fortran.Ada.Pascal.C.C++和Java,都是编译型语言.这类语言需要预先将 ...
- 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. ...
- Linux08--Shell程序设计03 shell script
第一个Shell脚本——HelloWorld [root@localhost ~]# vi sh01.sh #!/bin/bash #!表明使用哪种shell # this is my first s ...
- [2019.03.20]Linux Shell 执行传参数和expr
前不久入职实习生,现在在帮着组里面dalao们跑Case,时不时要上去收一下有木有Dump,每次敲命令太烦人于是逼着自己学写Shell脚本.一开始真的是很痛苦啊,也没能搞到书,只能凭网上半真半假的消息 ...
随机推荐
- 举例讲解Python中的死锁、可重入锁和互斥锁
举例讲解Python中的死锁.可重入锁和互斥锁 一.死锁 简单来说,死锁是一个资源被多次调用,而多次调用方都未能释放该资源就会造成死锁,这里结合例子说明下两种常见的死锁情况. 1.迭代死锁 该情况是一 ...
- IntelliJ IDEA 配置 Hadoop 源码阅读环境
1.下载安装IDEA https://www.jetbrains.com/idea/download/#section=windows 2.下载hadoop源码 https://archive.apa ...
- 在GAE中用Python编写webapp进行Post数据采集
#!/usr/bin/env python # -*- coding: cp936 -*- # # Copyright 2007 Google Inc. # # Licensed under the ...
- centos7 主从dns配置 bind服务
一,配置前请先关闭防火墙selinux 防火墙关闭方法,参见上一篇文章. setenforce 0 #临时关闭 修改/etc/selinux/config 文件 将SELINUX=enforc ...
- springBoot(2) HelloWorld
首先 下载一个 Spring Boot环境. 下载地址:https://spring.io/tools3/sts/all 打开STS.exe 一,新建项目 然后在空白处新建: 1.New→Other→ ...
- 配置idea中类头注释中的 ${user} 自动获取电脑的名字,怎么去修改名字
在idea安装路径下找到 idea\IntelliJ IDEA 2018.3.2\bin下面有一个文件叫:idea64.exe.vmoptions 编辑此文件就能修改主时钟自动获取的名称: 例如:添加 ...
- 1.parrot os 3.5-----nmap-----katoolin--zenmap
源:https://www.youtube.com/watch?v=LpM1KooILRc&list=PLBf0hzazHTGOEuhPQSnq-Ej8jRyXxfYvl&index= ...
- MySql 性能优化之 Explain
MySQL 之 Explain 输出分析 背景 前面的文章写过 MySQL 的事务和锁,这篇文章我们来聊聊 MySQL 的 Explain,估计大家在工作或者面试中多多少少都会接触过这个.可能工作中实 ...
- Oracle 高版本往低版本备份恢复的方法
1. 高版本的数据库备份恢复到低版本的数据库 有时候回报错, 提示version版本不一致, 2. 其实方法是expdp 导出的时候 增加一个参数就可以了 参数 一般的类型是 version=11.2 ...
- mysql日志信息查看与设置mysql-bin
查看 sql查询记录 日志是否开启 SHOW GLOBAL VARIABLES LIKE '%general_log%' 二进制日志 是否开启 SHOW GLOBAL VARIABLES LIKE ...