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. MIT线性代数:9.线性相关,基,维数。

  2. 学习笔记49_Redis

    Redis和memcache区别: 1 . mm是通过客户端驱动实现集群化,Redis是通过服务器配置文件集群 2. redis是可以进行持久化的存储 3. redis提供高级的数据结构,队列,栈都提 ...

  3. [Hive]Hive架构及常规操作

    Hive架构 如图中所示,Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Had ...

  4. regexp盲注的一些改进

    index.php?id=1 and 1=(SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli&qu ...

  5. [考试反思]0828NOIP模拟测试32:沉底

    ,,190,180,170,170... 倒数第6,75. 啊...再这么下去要失去理想了... 开学翘课停课以来的第一场考试,就考成这鬼模样. 本来还可以凭借那几次高分苟在公共卷总分的第2,这一场直 ...

  6. JC的小苹果 逆矩阵

    这题主要有两种做法:1种是用逆矩阵,转移时无须高斯消元.2是将常数项回代.这里主要介绍第一种. 首先题里少个条件:点权非负.设f [ i ][ j ]表示hp为i时,到达j点的期望次数. 那么若点权为 ...

  7. Feign设置assessToken

    import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.an ...

  8. STL库学习笔记(一)——什么是STL?

    小明是一个很牛逼的程序员,在国际标准化组织工作. 他现在正在设计新一代的C++标准,标准中有一个待实现的函数:findMax(),这个函数要求使用者输入任何类型的数据,他都能找到最大的一个. 于是他想 ...

  9. Android 开发中是否应该使用枚举?

    本文由咕咚发布在个人博客,转载请注明出处. 本文永久地址:https://gudong.name/2019/11/04/use-enum-or-not.html 在 Android 官方文档推出性能优 ...

  10. 002.Kubernetes简单入门实例

    一 环境准备 1.1 基础环境 Kubernetes模式:单机版 系统环境:CentOS 7/172.24.9.157 部署方式:yum快速部署 其他设置:开启NTP.关闭防火墙及SELinux 二 ...