编程基础
10.1.1 Shell 程序:Hello World
vi hello.sh 编写程序 i 开始编辑
echo 在显示器上显示
程序解析:在屏幕上显示 Hello World
存盘退出:Esc Shift+:wq
执行方式:
-
bash hello.sh //直接执行
-
chmod u+x hello.sh //赋予可执行权限
./hello.sh //执行当前目录下的hello.sh命令
10.1.2 Bash 脚本语言介绍
#!/bin/bash 程序解释器/bin/bash
10.1.3 结构和基本语法
#!/bin/bash 程序注释器 (此脚本使用bin/bash来解释执行)
#!是一个特殊的表示符 其后跟着解释此脚本的shell路径
bash只是shell的一种 还有很多其它shell 如:sh csh ksh tcsh...
#!/bin/bash只能放在第一行 如果后面还有#! 那么只能看成是注释 都是可执行语句 即程序体
程序体可能包括三类结构的语句:顺序结构 分支结构 循环结构
10.1.4 变量
vi array-var.sh 编写程序 i 开始编辑
程序解析:程序解释器/bin/bash
定义一个包括5个元素的一维数组users=(zsan lisi "wanger" mazda "xiaoyu")
在屏幕上显示 数组元素users【0】的值
在屏幕上显示 数组元素users【2】的值
在屏幕上显示 数组中全部元素的值
在屏幕上显示 数组元素的个数
在屏幕上显示 数组元素users【2】值的长度
在屏幕上显示 当前进程的进程号 即PID
在屏幕上显示 前一个命令的退出状态 0表示成功 1表示失败
在屏幕上显示 命令行参数的个数
在屏幕上显示 保存了的全部的命令行的参数
执行方式:
天冷加衣
10.1.5 控制语句
顺序结构体
vi proc.bash 编写程序 i 开始编辑
程序解析:程序解释器/bin/bash
切换当前目录到 Ben1
删除所有以.txt结尾的文件
在屏幕上显示 Well down
* 在Linux中表示通配符(通配任何字符)
执行方式:
vi example1.sh 编写程序 i 开始编辑
PS:j=`expr $i + 1`中的` `不是单引号 而是
expr命令可以实现数值运算 数值或字符串比较 字符串匹配 字符串提取 字符串长度计算等功能 它还具有几个特殊功能 判断变量或参数是否为整数 是否为空 是否为0等
程序解析:程序解释器/bin/bash
定义整型变量i 并赋值1
定义字符串变量abc 并赋值Hello World
在屏幕上显示 变量abc的值 Hello World
变量 i加1 并赋值给 j 变量
在屏幕上显示 j 的值
重新定义变量abc 赋值100
在屏幕上显示 abc的值
执行方式:
vi serial.sh 编写程序 i 开始编辑
"./":代表目前所在的目录
" . ./"代表上一层目录
"/":代表根目录
程序解析:程序解释器/bin/bash
创建一个目录ben2
切换当前目录到 ben2
把文件/etc/*.conf复制到当前目录下
如果conf.tar.bz2事先存在 就把它的修改时间改为现在的系统时间 如果不存在就创建一个空文件
把文件/etc/*.conf复制到上一层目录下
删除*.conf文件
执行方式:
分支结构体
if语句
vi ifexam1.sh 编写程序 i 开始编辑
程序解析:程序解释器/bin/bash
如果UID=0 即超级用户 那么
在屏幕上显示 Normal users
否则
在屏幕上显示 Root users
if语句结束
执行方式:
vi ifexam2.sh 编写程序 i 开始编辑
程序解析:程序解释器/bin/bash
如果存在目录./123 那么
进入目录./123
把文件/etc/passwd复制到当前目录下
如果存在文件./123 那么
删除文件./123
否则
创建目录./123
if语句结束
执行方式:
当文件./123存在时 执行命令 bash ifexam2.sh ./123被删除 再次执行命令 ./123出现
case语句
vi case1.sh 编写程序 i 开始编辑
程序解析:程序解释器/bin/bash
判断命令行第一个参数的值 如命令行输入命令:./case1.sh 1 hel -g a 那么 $0=./case1.sh $1=1 $2=hel $3=-g $4=a
如果$1是一个数字 那么显示digital
如果$1是一个小写字母 那么显示lower char
如果$1是一个大写字母 那么显示upper char
如果$1等于good 那么显示OK
否则 进入./ben1目录
并显示others
case语句结束
执行方式:
如何查看(显示)Linux默认的SHELL:
vi case2.sh 编写程序 i 开始编辑
程序解析:程序解释器/bin/bash
判断命令行第一个参数的值 如命令行输入命令:./case1.sh 1 hel -g a 那么 $0=./case1.sh $1=1 $2=hel $3=-g $4=a
如果$1等于lisi 那么显示clever girl
如果$1等于wuhan 那么显示stronger boy
如果$1等于zhangmin 那么显示he comes from chengdu
如果$1等于wanghua 那么显示she is a student
如果$1等于chenben 那么显示he is a teather
否则 在屏幕上显示we don`t know this person
case语句结束
执行方式:
循环结构
for语句
vi for1.sh 编写程序 i 开始编辑
程序解析:程序解释器/bin/bash
变量 i 从左至右依次赋 in 后面的值
每赋值一次 就执行一次for循环 直到赋值完毕
在屏幕上显示循环的次数 共循环6次
for语句结束
执行方式:
-
bash hello.sh //直接执行
-
chmod u+x hello.sh //赋予可执行权限
./hello.sh //执行当前目录下的hello.sh命令
一 二使用变量实现
三使用表达式实现
vi for2.sh 编写程序 i 开始编辑
程序解析:程序解释器/bin/bash
变量 name 从左至右依次赋 in 后面的值
每赋值一次 就执行一次for循环 直到赋值完毕
在屏幕上显示 Nice to see you, welcom $name
在屏幕上显示 $name, thank you very much for your help
在屏幕上显示 See you later, $name!
for语句结束
执行方式:
vi for3.sh 编写程序 i 开始编辑
程序解析:程序解释器/bin/bash
for循环 判断文件是否在当前目录中
若在 do
如果是一个文件 将所有文件名增加.old拓展名
如果是一个目录 将所有目录增加.cp后缀名 原来的目录仍然保持
for循环结束
执行方式:
vi for4.sh 编写程序 i 开始编辑
程序解析:程序解释器/bin/bash
定义整型变量total 初始值为1
i=1开始 i<10 累加1
计算0~10全部奇数的乘积
for循环结束
在屏幕上显示变量 $total的值
执行方式:
vi char.c 编写程序 i 开始编辑
程序解析:编译预处理指令
定义主函数 有且仅有一个主函数
输出 This is a C program.
执行方式:
无法直接执行./char.c
使用命令gcc -o ccc char.c编译 产生一个可执行的ccc
再执行命令./ccc
.
vi while1.sh编写程序 i 开始编辑
程序解析:程序解释器/etc/bash
通过管道循环读取/etc/passwd内容
以:为分隔符 只读取第一个字段
在屏幕上显示 用户名
执行方式:
vi while2.sh 编写程序 i 开始编辑
程序解析:程序解释器/bin/bash
定义整型变量total 初始值为0
读一行
累加1
显示/etc/passwd文件内容并作为while命令的输入(输入重定向)
显示变量total的值
执行方式:
vi char.c 编写程序 i 开始编辑
程序解析:程序解释器/bin/bash
定义一个字符串 显示SHELL变量SP3的值 并等待用户输入
定义一个菜单 包括com net org edu quit五个选项
每个选项之间用 :隔开
读取用户输入 如果输入的是项前的序号(数字)那么 对应的项被赋给name 否则name被赋null(空)
如果项目在item中
那么
如果item项在com中 在屏幕上显示 Apply com domain
如果item项在net中 在屏幕上显示 Apply net domain
如果item项在org中 在屏幕上显示 Apply org domain
如果item项在edu中 在屏幕上显示 Apply edu domain
如果遇到break 则退出
执行方式:
以上内容均为个人观点 如有问题欢迎及时指出
所有好运都在路上
雾都不起风
太阳升起时你未曾离开
公众号