Bash Shell编程简记
Shell编程简记
经常在linux环境下开发的同学,难免要使用shell的一些命令或者编写小的脚本,我这里也总结和整理下,自己对Shell的理解和常用的一些shell脚本。
按照目录分为如下3个节:
- shell的简介和常用的两种方式
- shell的语法,包括变量,循环,条件判断,运行终端命令
- 我常用的一些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编程简记的更多相关文章
- abc高级bash shell编程
http://www.pythoner.com/122.html abc高级bash shell编程
- linux 10 -Bash Shell编程
二十三. Bash Shell编程: 1. 读取用户变量: read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后 ...
- 【shell编程基础0】bash shell编程的基本配置
前面一篇“shell编程之变量篇”主要讲述下shell编程的变量的基本知识:设置变量的方式,自定义变量和环境变量的差别,变量的替换.删除.测试等. 这一篇主要是讲述在bash shell下的一些基本配 ...
- Bash shell编程的语法知识点(1)
Bash shell脚本编程知识点如下(初学,不全,欢迎讨论补充): shell简介 脚本的简单介绍 变量和引用 算术运算 交互式编程 选择判断 条件测试 循环 函数 shell简介 shell是一种 ...
- Bash Shell编程要点小结
一.case命令 case variable invalue1) command(s);; value2) command(s);; *) command(s);; esac 如果case变量没有被匹 ...
- GNU Bash Shell 编程图解笔记
bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写.1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括 ...
- bash/shell编程学习(3)
接上节继续, 1. 从键盘读取输入内容 #!/bin/bash read -p 'please input something:' input echo 'your input:' $input 运行 ...
- bash/shell编程学习(1)
1)定义变量 myvar=abc #注:等号前后不能加空格 #或 myvar="abc" #或 myvar='abc' #注:如果变量后面的值中间本身没有空格,加不加引号都无所谓, ...
- bash/shell编程学习(2)
先来复习上节重定向的用法: 1.快速清空文件 cat demo.txt < /dev/null 注:linux中有一个经典名言[一切皆文件],/dev/null可以认为是一个特殊的空文件,更形象 ...
随机推荐
- SpringBoot是如何加载配置文件的?
前言 本文针对版本2.2.0.RELEASE来分析SpringBoot的配置处理源码,通过查看SpringBoot的源码来弄清楚一些常见的问题比如: SpringBoot从哪里开始加载配置文件? Sp ...
- 2018.8.6 Python中的文件操作
前言: 使用python来读写文件是非常简单的操作,我们使用open()函数来打开一个文件,获取到文件句柄.然后通过文件句柄就可以进行各种操作了,根据打开方式的不同能够执行的操作也会有相应的差异. 打 ...
- VBoxManage.exe: error: Failed to instantiate CLSID_VirtualBox w/ IVirtualBox, CL SID_VirtualBox w/ IUnknown works.
我先把vagrantbox卸载了 重新装了一个 然后提示这个错误 当时我一脸蒙逼 后来经过百度 1, win+r 快捷键打开 “运行”,输入regedit 打开注册表 2,找到 HKEY_CLASSE ...
- 题解【洛谷】CF134A
题解 CF134A [Average Numbers] 这题就是简单的模拟. 只不过要优化一下常数什么的 思路: 为了不浪费时间总是取平均数,直接用一个 S 储存总和,每次都减去 a_i 再除以 n ...
- windows系统一台电脑先后添加多个git账号
概述 电脑上已经配置了github的ssh连接.现在又有一个不同的git账户,也就是要在一台电脑上配置两个git账号. 下面记录一下我配置的方法. 一.取消git全局配置 之前配置github的时候, ...
- 问题 C: 「Usaco2010 Dec」奶牛健美操O(∩_∩)O
题目描述 Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间的小路上奔跑.这些奶牛的路径集合可以被表示成一个点集和一些连接 两个顶点的双向路,使得每对点之间恰好有一条简单路径. ...
- lrd 模拟 总结
觉得是时候总结一下达哥的考试了!达哥的考试我就没有考好过,就之前达哥的考试都是人家ak我爆零,然后这次也不例外,我总是想在考场上尝试一些新的东西,其实就是作死行为,有的时候这种行为可以为我带来收益但是 ...
- 使用 element-ui 级联插件遇到的坑
需求描述[省市区三级联动] 组件:Cascader 级联选择器 后端需要所选中的地区的名字,如:['北京市', '北京市', '东城区'] 获取后端省市区具体列表的接口返回数据: // 省 - 参数1 ...
- python经典算法题:无重复字符的最长子串
题目:无重复字符的最长子串. 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子 ...
- html5自动横屏的方法
html5自动横屏的方法<pre>var evt = "onorientationchange" in window ? "orientationchange ...