什么是shell

shell是一个命令解释器,它在操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出屏幕返回给用户

shell对话方式

交互的方式:从键盘输入命令,通过/bin/bash的解析,可以立即得到shell的回应,一问一答的方式

非交互式:shell脚本

为什么使用shell编程!

shell编程是实现linix、UNIX系统管理及自动化运维必备的重要工具,可以把繁琐重复的命令写到shell脚本中执行,节约时间,有效的提高运维人员的工作效率,减少不必要的重复时间

变量

  • 普通变量(局部变量)
  ip = 192.168.22.205
echo $ip
  • 环境变量(全局变量)

    大写、系统定义的,在大部分地方可以使用

  • 特殊变量

$1 $2 $数字   $后数字是几代表shell脚本第几个参数
$# shell脚本中参数的个数、判断脚本的参数个数
$? 上一个命令的执行结果(返回值)0 执行正确 1相反
$0 脚本文件名

shell脚本的书写规范

  • 脚本一般存放在/server/scripts/中

  • 脚本编辑使用vim

  • 在执行bash脚本的时候,一般会根据"#!"后的解释器来确定该用那个程序解释这个脚本

  • 脚本文件名一般以.sh结尾

数学计算方法

# awk -v 变量=赋值   变量名称自己定义
awk 'BEGIN{print 1/2}'

书写脚本10与20的加减乘除

#vim cal.sh
#!/bin/bash
n1=10
n2=20
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1+num2}'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1+num2}'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1*num2}'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1/num2}' 执行脚本
# sh cal.sh

定义特殊变量,通过命令行传递参数方式

# vim cal.sh
#!/bin/bash
n1=$1
n2=$2
awk -vnum1=$1 -vnum2=$2 'BEGIN{print num1+num2}'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1+num2}'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1*num2}'
awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1/num2}' 执行脚本
# sh cal.sh 10 20 后面要加上两个参数,参数之前加空格

read交互式

  • read交互式赋予变量内容

  • read -p “提示信息”变量,变量名字,执行结束会把输入的信息存放在变量中

# read -p "input num1:"n1
imput num1:sgs
#echo $n1
sgs

通过read命令实现n1,n2赋值进行计算

#vim cal.read.sh
#!/bin/bash
read -p "input num1,num2:"n1 n2
awk -vnum1=$1 -vnum2=$n2'BEGIN{print num1+num2}'
awk -vnum1=$1 -vnum2=$n2'BEGIN{printnum1-num2}'
awk -vnum1=$1 -vnum2=$n2'BEGIN{print num1*num2}'
awk -vnum1=$1 -vnum2=$n2'BEGIN{print num1/num2}' 执行脚本
# sh cal.read.sh
input num1,num2:10 20 #随便输入两个数值,中间要有空格

条件表达式if

[ -d/data ] 判断目录是否存在

[ -f/data ] 判断文件是否存在

注意格式:[空格-f/data空格],[]里面两端必须有空格,中间写内容

  • 比大小
-eq       equal                ==
-ne not equal !=
-gt great than >
-ge great equal >=
-lt less than <
-le less equal <= eg:[ 10 -eq 10]
  • if单分支格式脚本
格式:if[条件];then
命令
fi #!/bin/bash
if [ $# -ne 2];then
echo "输入两个数字"
fi
  • if双分支格式脚本
格式:if[条件];then
命令
else
命令
fi comp.sh输入两个数字,如果n1大于n2输出n1>n2,如果n1不大于n2输出n1<=n2 #!/bin/bash
n1=$1
n2=$2 if [ $n1 -gt $2];then
echo "$n1 > $n2"
else
echo "$n1 <= $n2"
fi
  • case选择分支
case $变量名 in
'值1')
代码
;;
'值2')
代码
;;
*)
代码
;;
esac
#!/bin/bash
read -p "press some key,then press return:"KEY
case $KEY in
[a-z]|[A-Z]
echo "it's a letter"
;;
[0-9])
echo "it's a digit"
;;
echo "it's function keys,Spacebar or other ksys"
  • for循环
for 变量 in 值1 值2 值3
do
代码
done for 变量 `命令`
do
程序块
do done for((初始值;循环控制;变量变化))
do
程序块
done
#输出3次uptime

#!/bin/bash
for i in 1,2,3,4,5
do
echo "$i-->$(uptime)"
done #批量解压缩当前文件夹下所有的.tar.gz文件 #!/bin/bash
for i in `ls./*.tar.gz`
do
tar -zxvf $i >/dev/null
done #求1~100的和
#!/bin/bash
sum=0 #变量赋值的时候,=两边绝对不能有空格
for ((i=1;i<=100;i++))
do
sum=$(($sum+$i))
done
echo "1+2+3+...+100=$100"
  • while循环
while [条件]
do
代码
done
#!/bin/bash
a=1
while [ $a -le 5 ]
do
echo $a
((a++))
done #!/bin/bash
a=1
while((a<=5))
do
echo $a
((a++))
done

shell编程基础知识的更多相关文章

  1. Shell编程基础知识(一)

    一.基本的运行Linux程序的3种方法: (1) 使文件具有可执行权限,直接运行文件.eg:  chmod a+x testfile.sh   ./testfile.sh (2) 直接调用命令解释器来 ...

  2. shell编程基础知识3

    1.Linux下scp的用法 scp就是secure copy,一个在linux下用来进行远程拷贝文件的命令.有时我们需要获得远程服务器上的某个文件,该服务器既没有配置ftp服务器,也没有做共享,无法 ...

  3. shell编程基础知识2

    1.一维数组 定义:A={test1 test2 test3} 引用:echo ${A[0]} 表示引用第一个数组变量 echo ${A[1]} 表示引用第二个数组变量 显示数据参数:echo ${A ...

  4. SHELL脚本编程基础知识

    SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...

  5. Shell编程(二)——shell的基础知识及常用命令

    shell的基础知识 一.bash有以下特点: 1.记录命令历史 2.指令和文件名补全 3.别名 alias rm='rm -i' 4.通配符 * 0个或多个字符 ?​匹配一个字符 5 输入输出重定向 ...

  6. 【转】Shell编程基础篇-上

    [转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...

  7. TCP与UDP比较 以及并发编程基础知识

    一.tcp比udp真正可靠地原因 1.为什么tcp比udp传输可靠地原因: 我们知道在传输数据的时候,数据是先存在操作系统的缓存中,然后发送给客户端,在客户端也是要经过客户端的操作系统的,因为这个过程 ...

  8. 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!

    http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...

  9. 什么是Shell?Shell脚本基础知识详细介绍

    这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...

随机推荐

  1. [IOI2018] werewolf 狼人 [kruskal重构树+主席树]

    题意: 当你是人形的时候你只能走 \([L,N-1]\) 的编号的点(即大于等于L的点) 当你是狼形的时候你只能走 \([1,R]\) 的编号的点(即小于等于R的点) 然后问题转化成人形和狼形能到的点 ...

  2. C#画图之饼图

    public JsonResult DrawPie() { // 预置颜色 List<Color> colors = new List<Color>() { Color.Fro ...

  3. c#画图之柱形图

    public JsonResult DrawBarChart() { #region 允许配置项 //定义宽高 , width = ; //边缘位置留白 ; ; ; ; //辅助线距离顶部的距离 ; ...

  4. .net core 3.0+unit of work (一)

    1.先将unit of work源码下载 2.引入自己的项目 3.根据原始项目示意在自己项目的startup里注册仓储 由于我不想对每个实体都注册一遍,我使用了泛型仓储(core 2.0好像不支持) ...

  5. 第一个12PB的项目--2017年

    今年第一个上PB级的项目终于落地.准备了几年,期盼了几年的项目,终于有了市场.内心还是有成就感的. 可是年终沟通,就像是一瓢冷水,从头往下倒.拔凉拔凉的.什么是心寒.什么是希望.想了很多. 我还本想着 ...

  6. Pikachu-SSRF(服务器端请求伪造)

    SSRF(Server-Side Request Forgery:服务器端请求伪造) 其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制 导致攻击者可 ...

  7. t-SNE and PCA

    1.t-SNE 知乎 t-分布领域嵌入算法 虽然主打非线性高维数据降维,但是很少用,因为 比较适合应用于可视化,测试模型的效果 保证在低维上数据的分布与原始特征空间分布的相似性高 因此用来查看分类器的 ...

  8. RocketMQ的生产者和消费者

    生产者: /** * 生产者 */ public class Provider { public static void main(String[] args) throws MQClientExce ...

  9. 0级搭建类001-RedHat Enterprise Linux 8 安装(RHEL 8) 公开

    项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列目前不对外发布,仅作为博客记录.如学员在实际工作过程中需提前 ...

  10. GYCTF easyphp 【反序列化配合字符逃逸】

    基础知识可以参考我之前写的那个 0CTF 2016 piapiapia  那个题只是简单记录了一下,学习了一下php反序列化的思路 https://www.cnblogs.com/tiaopideju ...