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. TensorFlow深度学习基础与应用实战高清视频教程

    TensorFlow深度学习基础与应用实战高清视频教程,适合Python C++ C#视觉应用开发者,基于TensorFlow深度学习框架,讲解TensorFlow基础.图像分类.目标检测训练与测试以 ...

  2. 配置Docker镜像加速

    1.在docker toolbox执行下面的命令进入VM bash docker-machine ssh default 2.执行下面的命令修改profile文件: sudo vi /var/lib/ ...

  3. 学习笔记03http协议

    1.浏览器就是一个sokect客户端,使用http协议与服务器进行交流.http请求:请求头:(请求方法)sp(url)sp http/1.x <cr><lf>(通用头类型名) ...

  4. 学习笔记65_K均值_聚类算法

  5. 基于node的前端项目代码包发布至nexus

    目录 目录... 3 1. 前言... 1 2. 配置... 1 2.1. 配置angular.json文件... 1 2.2. 配置package.json文件... 1 2.3. 复制git地址. ...

  6. NOIP模拟18 T2

    不知道为什么很多人拒绝这题打搜索...其实搜索在充分剪枝后时间是非常优秀的,不管数据怎样基本都可跑出 首先一个显然结论:对于某种状态,他抓到的小精灵一定是一个连续的区间. 因此我们可以枚举这个区间的左 ...

  7. Laravel + Vue + Element 考勤应用 - 人力资源系统

    项目地址 Bee 介绍 Bee 是人力资源系统中的考勤应用,主要功能用于员工申请假单.Bee具有较高的性能.扩展性等,其中包括前后端分离.插拔式的规则验证(验证器).数据过滤(装饰器).消息队列等,后 ...

  8. 复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的 行首的空白字符及在vim中设置tab缩进为4个字符

    1.复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的 行首的空白字符 在命令模式下,使用正则表达式匹配 行首有空白字符行的模式:^[[:space:]] ...

  9. The reference to entity "characterEncoding" must end with the ';'

    在配置数据库连接池数据源时,本来没有错误,结果加上编码转换格式后eclipse突然报错: 这是怎么回事? 经过查询,发现这个错误其实很好解决. 首先,原因是: .xml文件中 ‘ & ’字符需 ...

  10. Apache服务及个人用户主页功能和密码验证

    Apache服务程序中有个默认未开启的个人用户主页功能,能够为所有系统内的用户生成个人网站,确实很实用哦 第1步:开启个人用户主页功能: 1.vim /etc/httpd/conf.d/userdir ...