Shell编程简记

  经常在linux环境下开发的同学,难免要使用shell的一些命令或者编写小的脚本,我这里也总结和整理下,自己对Shell的理解和常用的一些shell脚本。

  按照目录分为如下3个节:

  1. shell的简介和常用的两种方式
  2. shell的语法,包括变量,循环,条件判断,运行终端命令
  3. 我常用的一些shell

Shell简介

  shell可以看作是一种命令脚本语言,属于解释性的语言。主要运行在linux, unix ,mac 等平台下。 具有的特点是:简单易懂,并且编写开发速度块。

语法也比较通俗易懂。

我使用shell的地方,主要是包括两个方面

第一方面:在终端里,运行简单的linux的shell命令,查看和修改配置文件,查看环境变量,解压缩和上传和下载软件,切分文件,这方面主要使用的是一些常用的linux命令。

第二方面:就是编写简单的shell脚本,比如运行spark的脚本,执行批量的下载和压缩命令等。 这里就涉及到

shell的一些语法和程序设计了,之前看shell的书籍,基于shell的程序设计,可以写一本书,我使用的主要是自己常用的一些脚本,所以比较简单。

只涉及 shell的运行,shell的注释, shell命令行参数, shell中执行终端命令,shell循环, shell条件判断语句, 以及shell的函数。这几个。下面分别介绍。

Shell的运行

shell脚本文件,一般以*.sh作为文件后缀。在文件内容中,

行首以 # 开头(除#!之外)的是注释。#!是用于指定当前脚本的解释器

一般如下所示:

 #!/bin/bash
echo "hello world"

脚本执行:一般可以为:

  sh  filename

  bash  filename ;

./ filename

注意给脚本添加执行权限:chmod  +x hello.sh

Shell的基本语法

  shell的语句,一般不需要分号; 只有一行有多个命令时,需要分号,比如:

 #!/bin/bash

  echo hello; echo there

Shell的变量

  Shell中的变量只有两种类型,一种为字符串类型,一种为整形,不需要声明。 变量的赋值通过=赋值,如下语法:

#!/bin/bash
a="asbc"
b=
echo $a
echo $b

变量一般通过$美元符号引用, $var或者 ${var}的形式

shell中定义的变量一般作用域为全局变量,

从命令行传递到脚本的参数:$0,$1,$2,$3...$0就是脚本文件自身的名字,$1 是第一个参数,$2 是第二个参数,$3 是第三个参数

shell的条件判断和循环

  shell中的if判断格式为:

if

then

fi

举例如:

  #!/bin/bash
a="asbc"
if a="asbc"
then echo "a equals asbc"
fi

 写的时候,一定要注意fi的结束标识符。

shell中的条件判断, 可以使用

一对方括号包含条件测试[ ] 或者 test 关键字;

需要注意的是,方括号中的内容,两边必须有空格,具体的一个例子,如下图,个人感觉用 test 关键字比较好理解一些;

 #!/bin/bash
if [ $# -eq ]
then
echo "no parameter "
fi
if test $# -eq
then
echo "use test formate no paramter "
fi

在bash shell中对文件的判断是非常方便的, 可以使用如下的关键字:

-e  -f  -d  等。

举例如: if test -e $filename 等

对于字符串的判断,可以使用 =, == , != 等关键字符号

对于整数,可以使用 -eq -ne, -lt 等关键字

if [ "$a" -eq "$b" ]

逻辑与 操作为  -a

逻辑或, 操作为  -o

Shell 中的 循环语句

shell中的循环包括 for , while 等形式,这里只介绍 for循环的使用

for 循环形式包括如下三种形式:

#数字段形式
 

 for i in {..}
  do
  echo $i
 done

#详细列出(字符且项数不多)

for File in
do
echo $File
done

#对存在的文件进行循环

for shname in `ls *.sh`
do
name=`echo "$shname" | awk -F. '{print $1}'`
echo $name
done

在第三种可以看到,bash shell 中可以嵌入awk的语法处理文字信息

shell中定义函数

shell函数的定义可以有两种形式,

第一种形式:

函数名(){
    command1
    command2
    ...
    commandN
    [ return value ]
}

第二种形式:

function 函数名(){
    command1
    command2
    ...
    commandN
    [ return value ]
}

具体里的一个例子:

   function traversedir(){
for element in ` ls $ `
do
dir_or_file=$"/"$element
if test -d $dir_or_file
then
traversedir $dir_or_file
else
echo $dir_or_file
fi
# echo $"/"$element
done
for i in {..}
do
echo $i
done
}

Shell的函数调用

函数名  参数, 举例如:

tranversedir   "/home/wang/test"

自己常用的几个Shell

1  遍历文件夹的脚本

 #!/bin/bash
function traversedir(){
for element in ` ls $ `
do
dir_or_file=$"/"$element
if test -d $dir_or_file
then
traversedir $dir_or_file
else
echo $dir_or_file
fi
# echo $"/"$element
done
}
root_dir='/Users/wanggang09/exercise/helloPython'
traversedir $root_dir

2 spark的提交脚本

#!/bin/bash
num_executor=
executor_memory=64G
src_file='hdfs://test_imei'
imei_file='hdfs:/sample_wifi_list_simular_2'
spark-submit --master yarn --deploy-mode client --py-files geohash.py wifi_list_simular.py $src_file $imei_file

Bash Shell编程简记的更多相关文章

  1. abc高级bash shell编程

    http://www.pythoner.com/122.html     abc高级bash shell编程

  2. linux 10 -Bash Shell编程

    二十三. Bash Shell编程:     1.  读取用户变量:     read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后 ...

  3. 【shell编程基础0】bash shell编程的基本配置

    前面一篇“shell编程之变量篇”主要讲述下shell编程的变量的基本知识:设置变量的方式,自定义变量和环境变量的差别,变量的替换.删除.测试等. 这一篇主要是讲述在bash shell下的一些基本配 ...

  4. Bash shell编程的语法知识点(1)

    Bash shell脚本编程知识点如下(初学,不全,欢迎讨论补充): shell简介 脚本的简单介绍 变量和引用 算术运算 交互式编程 选择判断 条件测试 循环 函数 shell简介 shell是一种 ...

  5. Bash Shell编程要点小结

    一.case命令 case variable invalue1) command(s);; value2) command(s);; *) command(s);; esac 如果case变量没有被匹 ...

  6. GNU Bash Shell 编程图解笔记

    bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写.1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括 ...

  7. bash/shell编程学习(3)

    接上节继续, 1. 从键盘读取输入内容 #!/bin/bash read -p 'please input something:' input echo 'your input:' $input 运行 ...

  8. bash/shell编程学习(1)

    1)定义变量 myvar=abc #注:等号前后不能加空格 #或 myvar="abc" #或 myvar='abc' #注:如果变量后面的值中间本身没有空格,加不加引号都无所谓, ...

  9. bash/shell编程学习(2)

    先来复习上节重定向的用法: 1.快速清空文件 cat demo.txt < /dev/null 注:linux中有一个经典名言[一切皆文件],/dev/null可以认为是一个特殊的空文件,更形象 ...

随机推荐

  1. 加上cdn后字体跨域

    @font-face是CSS3中的一个特性,可以把自己定义的Web字体嵌入到网页中,随着@font-face,越来越多的网页采用字体图标作为网页中的小图形. 比如Bootstrap就采用了Glyphi ...

  2. C语言I博客作业04

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-1/homework/9773 我在这个课程的目标 ...

  3. 深入了解 Java Resource && Spring Resource

    在Java中,为了从相对路径读取文件,经常会使用的方法便是: xxx.class.getResource(); xxx.class.getClassLoader().getResource(); 在S ...

  4. canvas与工作流的不解之缘

    html的标签 <canvas>用于图形的绘制,通过脚本 (通常是JavaScript)来完成,canvas简而言之就是个画布.上一篇文章我们提到工作流的一个重要组成部分:流程建模,也就是 ...

  5. day5-字典专区

    # 字典# dict 1.fromkeys()根据序列,创建字典,并指定统一的值 v = dict.fromkeys(["],123) print(v) {': 123} 2.get()根据 ...

  6. django 之创建自己的模板(使用案例)

    Django 创建自己的模板篇(实例) 此处需要创建模板,主要是对自己的模板进行扩展: 一般是扩展模板的tag和filter两个功能.可以用来创建你自己的tag和filter功能库. 创建模板库 分为 ...

  7. Convolutional Sequence to Sequence Learning 论文笔记

    目录 简介 模型结构 Position Embeddings GLU or GRU Convolutional Block Structure Multi-step Attention Normali ...

  8. Springboot 自动配置浅析

    Introduction 我们知道,SpringBoot之所以强大,就是因为他提供了各种默认的配置,可以让我们在集成各个组件的时候从各种各样的配置文件中解放出来. 拿一个最普通的 web 项目举例.我 ...

  9. [WPF] Caliburn Micro学习一 Installation

    在之前的文章(http://blog.csdn.net/alvachien/article/details/5670838)里面,已经提到过MVC和MVVM在Design Pattern上的比较. 首 ...

  10. mui 底部导航栏的实现

    mui 底部导航栏的实现 <nav class="mui-bar mui-bar-tab"> <a id="display" class=&q ...