Linux shell脚本编程:
守护进程,服务进程:启动?开机时自动启动:
交互式进程:shell应用程序 广义:GUI,CLI
GUI:
CLI:
词法分析:命令,选项,参数
内建命令:
外部命令:PATH
fork()创建为一个进程: 把要运行的一系列命令,写在文件中:
脚本或程序源文件:文本文件
两种方式:
编译执行:预处理---->编译---->汇编---->链接:事先完成,结果:二进制程序文件
C,C++
解释执行:由解释器全程参与运行过程,每次读取一行,运行一行;
Python:程序库
程序控制结构:调用编程库完成编程编写;
库文件:功能模块,在编程中可调用;通过其API:应用编程接口;
Bash:程序
程序控制结构,调用机器上命令程序文件进行编程编写;
外部命令:各应用程序提供;
程序:指令+数据
算法+数据结构 过程式编程:以指令为中心,设计算法,数据服务于算法;
对象式编程:以数据为中心,设计数据结构(类),程序服务于数据结构; bash过程式编程:
顺序执行:逐个执行
选择执行:只执行其中一个分支
循坏执行:一段代码要执行0,1或多遍 编程元素:变量、流程、函数 变量:可变化的量,命名内存空间 bash环境:
本地变量:当前shell进程;
环境变量:当前shell进程及其子进程;
局部变量:某个函数执行过程;
位置参数变量:在脚本中引用传递给脚本的参数;在函数中引用传递给函数的参数;
特殊变量:$?,$*,$@,$#,$$ 变量类型:
数值,字符: 数值:
整数
浮点数
字符:
ASCII
120:
字符:1, 2 , 0
数值:120 ---> 变量类型的作用:
存储空间
运算格式 语言对变量类型的支持力度:
强类型:
弱类型:变量类型不严格区分;
默认存储机制:bash为字符 bash的变量使用特点:弱类型、无需事先说明; 本地变量:
name=value
name:变量名
=:赋值符号
value:值 变量名:只能包含数字、字母和下划线:且不能以数字开头;
引用变量:${name},name
例:
[root@localhost ~]# animal="panao"
[root@localhost ~]# echo ${animal}
panao
引用:
弱引用:"",其内部的变量引用会替换为变量值;
强引用:'',其内部的变量引用会保持原有字符;
命令引用:`COMMAND`,$(COMMAND),引用命令的执行结果; 声明为整型:
declare -i name[=value]
let name=value 生命周期:
创建
销毁:
自动销毁:shell进程终止;
手动销毁:unset name
例:
[root@localhost ~]# unset animal 环境变量:
被"导出"的本地变量
export name[=value]
declare -x name[=value] 查看所有环境变量:env,printenv,export 销毁:
unset name 脚本:文本文件
运行脚本:事实上是运行一个bash进程,此进程负责从脚本文件中读取一个执行逻辑,而后有bash进程负责解析并运行此逻辑;
启动脚本:
(1) #bash /PATH/TO/SCRIPT_FILE
(2)一个执行权限,
# ./PATH/TO/SCRIPT_FILE shebang:
#!/bin/bash 第一行:顶格给出shebang
注释行:# bash的常用选项:
-n:检查脚本中的语法错误;
-x:调试执行脚本; 命令的状态结果:
bash进程用于追踪执行的命令成功与否的状态;
0:成功
1-222:失败 特殊变量:
$?:上一条命令的执行状态结果;
例:
[root@localhost bin]# echo $?
0 // 0表示成功 布尔型:
"真":成功
"假":失败 自定义脚本的状态结果:
exit[n] 注意:脚本中任何位置执行了exit命令即会终止当前shell进程; 条件测试:
界定程序执行环境: (1)根据运行的命令的状态结果;
(2)测试表达式
test EXPRESSION
[ EXPRESSION ] //括号两边必须有空格
[[ EXPRESSION ]] //括号两边必须有空格 整数测试:隐含着做数值大小比较,所以不要给变量引用加引用;
$A -gt $B:是否大于:是则为"真",否则为"假";
$A -ge $B:是否大于等于;
$A -lt $B:是否小于;
$A -le $B:是否小于等于;
$A -eq $B:是否等于;
$A -ne $B:是否不等于;
字符串测试:ASCII数值越大,字符比较时其值越大
"$A" > "$B":是否大于;
"$A" < "$B":是否小于;
"$A" == "$B":是否等于;
"$A" != "$B":是否不等于;
-z "$A":是否为空;空则为"真",否则为"假"
-n "$A":是否不空;不空则为"真",空则为"假" 注意:应该使用[[ EXPRESSION ]] 文件测试:测试文件的存在性以及属性;
-e $file:是否存在,存在则为"真",否则为"假"
-a $file:同上
-f $file:文件是否存在且为普通文件;
-d $file:文件是否存在且为目录;
-h $file:是否存在且为符号链接文件;
-L $file:同上;
-b $file:是否存在且为块设备文件;
-c $file:是否存在且为字符设备文件;
-S $file:是否存在且为套接字文件;
-p $file:是否存在且为管道文件; -r $file:当前用户对文件是否拥有读权限;
-w $file:当前用户对文件是否拥有写权限;
-x $file:当前用户对文件是否拥有执行权限; -u $file:文件是否拥有SUID权限;
-g $file:文件是否拥有SGID权限;
-k $file:文件是否拥有sticky权限; -O $file:当前用户是否为指定文件的属主;
-G $file:当前用户是否为指定文件的属组; 双目操作符:
$file1 -nt $file2:file1是否新于file2,file1的最近一次的修改时间是否晚于file2的;
$file1 -ot $file2:file1是否旧于file2,file1的最近一次的修改时间是否早于file2的;
$file1 -ef $file2:file1与file2是否指向了同一个inode:测试二者是否为同一个文件的硬链接; 特殊设备:
/dev/null:空,bit buckets,吞下所有数据,并直接丢弃;
/dev/zero:突出一堆0: bash之条件判断(选择执行):
if/then,case if CONDITTION;then
if-true-分支
fi if CONDITTION;then
if-true-分支
else
if-false-分支 !CONDITTION:取反 练习:写一个脚本
如果其路径不存在,则将其创建为目录,否则显示其存在,并显示内容类型; #!/bin/bash
#
filename="/tmp/x/y/z/testdir"
if [ -e $filename ];then
echo "$filename exists."
file $filename
else
mkdir -p $filename
fi
~
~
脚本参数(位置参数变量):
./script.sh /etc/fstab /etc/grub2.cfg
$0 $1 $2 位置参数变量:$1,$2,....
${10} 特殊变量:
$?:命令的状态结果;
$#:传递给脚本或函数的参数个数;
$*和$@:引用传递给脚本或函数的参数列表; shift:[n]:轮替 与用户交互:
read命令:
read [option] VAR...
-p "PROMPT"
-t timeout
示例: #!/bin/bash
# read -p "Plz enter a username: " -t 5 username if [ -z "$username" ]; then
username="myuser"
fi if id $username &> /dev/null; then
echo "$username exists."
else
useradd $username
fi 命令引用:
`COMMAND`,$(COMMAND) 引用命令的执行结果:
(1)ls `which cat`
(2)lines=$(wc -l /etc/fstab | cut -d '' -f1) #!/bin/bash
#
if [ -f $1 ]; then
lines=$(wc -l $1 | cut -d' ' -f1)
echo "$1 has $lines lines."
else
echo "$1 not exists or not a file."
fi 练习:写一个脚本,完成如下功能:
判断给定的两个数值,孰大孰小;
给定数值的方法:脚本参数,命令交互;
代码如下: 1 #!/bin/bash
2 #
3 read -p "Plz enter two integer: " -t 10 num1 num2
4
5 if [ -z "$num1" ];then
6 echo "Plz give two integers."
7 exit 1
8 fi
9
10 if [ -z "$num2" ];then
11 echo "Plz give two integers."
12 exit 1
13 fi
14
15 if [$num1 -ge $num2 ];then
16 echo "Max: $num1,Min;$num2."
17 else
18 echo "Max:$num2,Min:$num1."
19 fi
循环语句:
for,while,until 循环:将循坏体代码执行0、1或多次;
进入条件:进入循环的条件;
退出条件:循环终止的条件; for VARIABLE in LIST;do
循环体
done LIST:是由一个或多个空格分隔开的字符串组成;
把列表的每个字符串逐个赋值给VARIABLE表示的变量; for username in user1 user2 user3;do
循环体
done 进入条件:列表非空
退出条件:列表遍历结束; 添加5个用户:
#!/bin/bash
#
for username in user1 user2 user3 user4 user5; do
if id $username &> /dev/null; then
echo "$username exists."
else
useradd $username
echo "Add user $username finished."
fi
done
LIST的生成方法:
(1)整数列表
(a){start..end}
(b)$(seq start [[step]end])
(2)直接给出
(3)glob
(4)根据命令生成 示例:数值列表
#!/bin/bash
#
for i in {1..10}; do
if id user$i &> /dev/null; then
echo "user$i exists."
else
useradd user$i
echo "Add user user$i finished."
fi
done 示例:glob
#!/bin/bash
#
for filename in /var/log/*; do
file $filename
done 示例:命令生成列表
#!/bin/bash
#
for username in $(cut -d: -f1 /etc/passwd); do
echo "$username primary group: $(id -n -g $username)."
done
~ 算术运算:
+,-,*,%,** sum=$a+$b
(1)$[$A+$B]
(2)$(($A+$B))
(3)let VARIABLE=$A+$B
(4)VARIABLE$(expr $A + $B) 示例: [root@localhost bin]# a=6
[root@localhost bin]# b=7
[root@localhost bin]# sum=$a+$b
[root@localhost bin]# echo $a+$b
6+7
[root@localhost bin]# echo $[$a+$b]
13
[root@localhost bin]# let $a+$b
[root@localhost bin]# let sum=$a+$b
[root@localhost bin]# echo $sum
13
[root@localhost bin]# expr $a + $b
13 示例:求100以内正整数之和;
#!/bin/bash
#
declare -i sum=0 for i in {1..100}; do
sum=$[$sum+$i]
done echo $sum 练习:求100以内所有偶数之和;
使用至少三种方法实现;

Linux shell脚本编程(一)的更多相关文章

  1. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  2. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  3. Linux Shell脚本编程--Linux特殊符号大全

    Linux Shell脚本编程--Linux特殊符号大全 linux_shell 特殊符号的介绍 2011

  4. Linux Shell脚本编程while语句

    Linux Shell脚本编程while语句案例 1,每隔3秒,打印一次系统负载 #!/bin/bash while truedo    uptime    sleep 3done 2,把监控结果保存 ...

  5. Linux Shell脚本编程-基础1

    概述:  shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础 ...

  6. Linux shell脚本编程基础之练习篇

    shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...

  7. 【学习】Linux Shell脚本编程

    1.脚本的组成和执行 Linux shell脚本的结构并不复杂,其主要由变量.内部命令以及shell的语法结构和一些函数.其他命令行的程序等组成,以下是一个简单的shell脚本. #!/bin/bas ...

  8. [linux] shell脚本编程-xunsearch安装脚本学习

    安装脚本setup.sh #!/bin/sh # FULL fast install/upgrade script # See help message via `--help' # $Id$ # s ...

  9. Linux Shell脚本编程的注意事项

    Linux下(Shell脚本 http://www.jbxue.com/jb/shell/)编程的一些注意事项,如编程风格.命名风格等. 一.常用技巧 ssh user@server bash < ...

随机推荐

  1. 游戏编程系列[2]--游戏编程中RPC与OpLog协议的结合--序

    在系列[1]中,我们展示了RPC调用协议的定义以及演示,通过方法定义以及协议约定,进行了协议约定以及调用过程的约定.然而,实际上在游戏中,调用过程之后,需要传输相对多的数据给服务端. 常用场景,客户端 ...

  2. 使用nwjs开发桌面应用之Hello,World!

    今天发现原来JavaScript也可以用来开发桌面应用程序,顿时有一种很牛逼的感觉,于是马上就开始了Hello,World!,感受一下JavaScript的强大. 可以用来开发桌面应用的js框架有三种 ...

  3. 微软MVP攻略 (如何成为MVP?一个SQL Server MVP的经验之谈)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 初衷 什么是微软MVP? 成为微软MVP的条件? 如何成为微软MVP? (一) 申请时间划分 (二) 前期准备 (三) ...

  4. .NET Core RC2发布在即,我们试着用记事本编写一个ASP.NET Core RC2 MVC程序

    在.NET Core 1.0.0 RC2即将正式发布之际,我也应应景,针对RC2 Preview版本编写一个史上最简单的MVC应用.由于VS 2015目前尚不支持,VS Code的智能感知尚欠火候,所 ...

  5. 如何部署Zabbix服务端

    部署环境 RHEL 6.7 Zabbix-server 2.2.14 安装zabbix官方源 # wget http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_6 ...

  6. H5图片裁剪升级版

    前段时间做了个跟裁剪相关的活动<用H5中的Canvas等技术制作海报>,这次公司要做个与奥运相关的活动,扫车牌赢奖. 于是我就在上一个活动的基础上,将代码重新封装一下,并且将计算方式写的更 ...

  7. 用CIL写程序:从“call vs callvirt”看方法调用

    前文回顾:<用CIL写程序系列> 前言: 最近的时间都奉献给了加班,距离上一篇文章也有半个多月了.不过在上一篇文章<用CIL写程序:定义一个叫“慕容小匹夫”的类>中,匹夫和各位 ...

  8. nginx 基础

    同步和阻塞,异步和非阻塞 http://yaocoder.blog.51cto.com/2668309/1308899  (51CTO) https://segmentfault.com/a/1190 ...

  9. ASP.NET Core 中文文档 第四章 MVC(3.6.2 )自定义标签辅助类(Tag Helpers)

    原文:Authoring Tag Helpers 作者:Rick Anderson 翻译:张海龙(jiechen) 校对:许登洋(Seay) 示例代码查看与下载 从 Tag Helper 讲起 本篇教 ...

  10. [原创]django+ldap实现统一认证部分一(django-auth-ldap实践)

    前言 接之前我的文章,django+ldap+memcache实现单点登录+统一认证 ,ldap部署相关,ldap双机\LAM配置管理\ldap备份还原,目前来说,我们已经有了高可用性的ldap环境了 ...