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. [Java] 生成二维码源码,可以在二维码中间加logo,底部可以加文字介绍

    链接:https://pan.baidu.com/s/1bc1h-ix-No-2o9Ysd4_B3Q提取码:0ad4

  2. html中<button>标签的type

    HTML的<button>标签的type主要有三种可选值,reset.submit.button. 其中reset为重置按钮,用于清除form表单的数据:submit为提交按钮,点击后会对 ...

  3. Function:凸包,单调栈,题意转化,单峰函数三分,离线处理

    很难啊啊啊!!! bzoj5380原题,应该可以粘题面. 问题转换: 有一个n列1e9行的矩阵,每一列上都写着相同的数字Ai. 你从位置(x,y)出发每一步可以向左上方或左方走一步,最后走到第一行. ...

  4. [考试反思]0809NOIP模拟测试15:解剖

    说在前面: 不建议阅读.这里没有考试经验,只有一大堆负面情绪. 看了你不会有什么收获.看完了就不要怪我影响了你的心情. 以后不粘排行榜了.没什么意思没什么用. 但是我的意思并不是因为这次没考好的一时兴 ...

  5. CSPS模拟 88

    今天我还是个弟弟. 果然唯有AK不可超越.. T1 决策单调性,暴力上整体二分. 极限数据跑的挺快,可是被n<k的脑残测试点qj了.. T2 又是大模拟! T3 想到剩余同种数量的彩球完全等效 ...

  6. CSPS模拟 47

    考试时T1没玩明白,用一个WA90把100盖住了? T1 Emotional Flutter 题目非常蠢萌,只是注意当你把黑块前伸s距离后,应把脚的长度视为0,而不应为1. T2 Endless Fa ...

  7. Python基础学习(一)之Python的概述与环境安装

    Python介绍 Python语言介绍 Python是一门高级的.面向对象的.解释性.脚本语言. 高级语言:贴近开发者,对应底层语言,底层语言贴近机器:java.C#.php .ruby 面向对象对应 ...

  8. Scrapy进阶知识点总结(四)——Item Pipeline

    Item Pipeline Item Pipeline调用发生在Spider产生Item之后.当Spider解析完Response之后,Item就会传递到Item Pipeline,被定义的Item ...

  9. ios jquery css('left')无法读取属性解决的方法

    ios jquery css('left')无法读取属性解决的方法 <pre>$(this).position().left因为display:none状态下是读取不了 $(this).o ...

  10. Feign 调用丢失Header的解决方案

    问题 在 Spring Cloud 中 微服务之间的调用会用到Feign,但是在默认情况下,Feign 调用远程服务存在Header请求头丢失问题. 解决方案 首先需要写一个 Feign请求拦截器,通 ...