Shell编程学习总结
Shell编程总结
一、Hello World
新建文件test.sh
然后编辑代码:
#!bin/bash/ echo “hello world !”
cd 到目标目录下:
chmod +x ./test.sh #使脚本有执行权限 ./test.sh #运行脚本
另一种运行方式:
sh test.sh
二、变量
- 变量名要求:
a) 只能是数字,字符,下划线,并且首字母不能是数字
b) 中间不能有空格,但是可以有下划线
c) 不能用关键词
- 使用变量:
myshell=”12345”
echo ${myshell}
花括号加不加都行,加花括号只是方便解释器识别变量边界。
另外变量和运算符之间不能有空格。
- 只读变量
myshell=“1234” readonly myshell
只读变量意味着不能更改
- 删除变量
myshell=”1234” unset myshell
echo myshell #可以看到什么也没输出
- 变量类型
a) 局部变量:只在shell中起作用,shell运行的时候其他命令不能调用它
b) 环境变量:shell运行的时候,其他命令可以调用的
c) shell变量:是由shell程序设置的特殊变量,有局部变量也有环境变量,这些变量是保证shell的正常运行
- shell字符串
a) 单引号:
i. 任何字符都会原样输出,单引号里面的变量无效
ii. 单引号里面不能出现单引号(转义的也不行)
b) 双引号
i. 双引号里可以有变量
ii. 双引号里可以出现转义字符
eg:
#!/bin/bash
yourname='lihua'
myshell="Hello, I know you are \"${yourname}\"!"
echo ${myshell}
- 拼接字符:
#!/bin/bash
yourname="lihua"
chat="Hello, "$yourname" !"
chat1="Hello, ${yourname} !"
echo ${chat} ${chat1}
- 获取字符串长度
#!/bin/bash
myshell=""
echo ${#myshell}
- 提取子串
#!/bin/bash
string="I'm AI"
echo ${string:1:2}
这个地方运行的时候用sh test.sh可能会不兼容,可以用 chmod +x ./test.sh运行
- 查找子串
#!/bin/bash string="hello, AI" echo `expr index "$string" h` #两边的不是单引号是Esc键下边的那个符号,句式是固定的的
- shell数组
shell只支持一维数组
a) 格式:
数组名=(val1 val2…) #用空格分离
value=(1 2 3 4)
b) 随机访问下标:
value[1]=1
c) 读取数组:
i. ${数组名[下标]}
ii. 读取全部元素${数组名[@]}
d) 获取长度
# 取得数组元素的个数
length=${#数组名[@]}
# 或者
length=${#数组名[*]}
# 取得数组单个元素的长度
lengthn=${#数组名[n]}
- shell注释
前面加#
三、shell传递参数
传递参数的格式,$n,$0表示执行文件名,$1表示第一个参数,之后以此类推:
A+B的小例子:
#!/bin/bash
echo "name:$0"
a=$1
b=$2
c=`expr ${a} + ${b}`
echo ${c}

几个特殊符号:
|
参数处理 |
说明 |
|
$# |
传递到脚本的参数个数 |
|
$* |
一第一个单字符显示所有脚本传递的参数。 |
|
$$ |
脚本运行的当前进程ID号 |
|
$! |
后台运行的最后一个进程的ID号 |
|
$@ |
与$*相同,使用时加引号,是返回每个参数 |
|
$- |
显示shell使用的当前选项,与set命令功能相同 |
|
$? |
显示最后命令的退出状态。0表示没有错误,其他任何值都表示有错误。 |
四、shell基本运算符
a) 基本包括:算数运算符、关系运算符、布尔运算符、字符串运算符、文件测试运算符。
bash不支持原生的数学运算,可以通过其他命令来实现,awk和expr
b) 算数运算符
|
运算符 |
说明 |
举例 |
|
+ |
加法 |
`expr $a + $b` |
|
- |
减法 |
`expr $a - $b` |
|
* |
乘法 |
`expr $a * $b` |
|
/ |
除法 |
`expr $a / $b` |
|
% |
取余 |
`expr $a % $b` |
|
= |
赋值 |
a=$b |
|
== |
相等,返回true |
[$a == $b] |
|
!= |
不相等,返回true |
[$a != $b] |
#!/bin/bash
a=1
b=2
if [ $a == $b ]
then
echo "equal"
fi
if [ $a != $b ]
then
echo "not equal"
fi
c) 关系运算符
|
运算符 |
说明 |
举例 |
|
-eq |
两个数是否相等 |
[ $a –eq $b ] |
|
-ne |
两个数是否不相等 |
[ $a –ne $b ] |
|
-gt |
左边是否大于右边 |
[ $a –gt $b ] |
|
-lt |
左边是否小于右边 |
[ $a –lt $b ] |
|
-ge |
左边是否大于等于右边 |
[ $a –ge $b ] |
|
-le |
左边是否小于等于右边 |
[ $a –le $b ] |
d) 布尔运算符
|
运算符 |
说明 |
举例 |
|
! |
非运算 |
[ ! false ] |
|
-o |
或运算 |
[ $a –lt 20 –o $b –gt 100 ] |
|
-a |
与运算 |
[ $a –lt 20 –a $b –gt 100 ] |
e) 逻辑运算符
|
运算符 |
说明 |
举例 |
|
&& |
逻辑的AND |
[[ $a -lt 100 && $b -gt 100 ]] |
|
|| |
逻辑的 OR |
[[ $a -lt 100 || $b -gt 100 ]] |
f) 字符串运算符
|
运算符 |
说明 |
举例 |
|
= |
检测两个字符串是否相等 |
[ $a = $b ] |
|
!= |
检测两个字符串是否不等 |
[ $a != $b ] |
|
-z |
检测字符串长度是否为零 |
[ -z $a ] |
|
-n |
检测字符串长度是否不0 |
[ -z $a ] |
|
str |
检测字符串是否为空 |
[ $a ] |
g) 文件测试符
|
操作符 |
说明 |
举例 |
|
-b file |
检测文件是否是块设备文件 |
[ -b $file ] |
|
-c file |
检测文件是否是字符设备文件 |
[ -c $file ] |
|
-d file |
检测文件是否是目录 |
[ -d $file ] |
|
-f file |
检测文件是否是普通文件 |
[ -f $file ] |
|
-g file |
检测文件是否设置了SGID位 |
[ -f $file ] |
|
-k file |
检测文件是否设置了黏着位 |
[ -k $file ] |
|
-p file |
检测文件是否有名管道 |
[ -p $file ] |
|
-u file |
检测文件是否设置了SUID位 |
[ -u $file ] |
|
-r file |
检测文件是否可读 |
[ -r $file ] |
|
-w file |
检测文件是否可写 |
[ -w $file ] |
|
-x file |
检测文件是否可执行 |
[ -x $file ] |
|
-s file |
检测文件是否为空 |
[ -s $file ] |
|
-e file |
检测文件是否存在 |
[ -e $file ] |
五、echo命令
a) 显示字符串
i. echo “It is a test”
ii. 双引号可以省略:echo It is a test
b) 显示转义字符
i. echo “\”It is a test \””
c) 显示变量
#!/bin/bash read name echo "$name from read"
d) 显示换行
i. echo –e “ok! \n” # -e 开启转义
echo “It is a test”
e) 显示不换行
i. echo –e “ok! \c” # -e 开启转义
echo “It is a test”
f) 将结果重定向至文件
i. echo “It is a test” > myfile
g) 原样输出到字符串,不进行转移或取变量
i. echo ‘$name\”’s
h) 显示执行命令结果
i. echo `date` #这里用的是反引号
六、Shell流程控制、
a) if
语法格式:
if condition then
command1 command2 … fi
b) if else
if condition
then
command1
…
else
command1
…
fi
c) if else-if else
if condition1
then
command1
elif condition2
then
command1
else
commandm
fi
d) for 循环
格式:
for var in item1 item2 … itemN
do
command1
command2
…
Done
例子:
#!/bin/bash
value=(A B C D)
for var in ${value[@]}
do
echo "The value is: $var"
done
for loop in A B C D
do
echo "The value is: $loop"
done
e) while循环
while condition
do
command
done
例子:
#!/bin/bash
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
f) until循环
就像do-while和while循环的区别一样
g) case
就像switch。
格式:
case 值 in
模式1)
command1
…
;;
模式2)
command2
…
;;
esac #就像C语言中的default
h) break、continue、esac
七、shell函数
格式:
[ function ] funname [()]
{
action;
[return int;]
}
例子:
#!/bin/bash
demoFun() {
echo "$1"
echo "$2"
}
demoFun 100 110
八、输入输出重定向
|
命令 |
说明 |
|
Command > file |
将输出重定向到file |
|
Command < file |
将输入重定向到file |
|
Command >> file |
将输出以追加的方式重定向到file |
|
n > file |
将文件描述符为n的文件重定向到file |
|
n >> file |
将文件描述符为n的文件以追加的方式重定向到file |
|
n >& m |
将输出文件m和n合并 |
|
n <& m |
将输入文件m和n合并 |
|
<< tag |
将开始标记tag和结束标记tag之间的内容作为输入 |
九、Shell文件包含
格式:
. filename #注意点号和文件名中间有一空格
或
source filename
实例:
test1.sh
#!/bin/bash url=http://www.runoob.com
test2.sh
#!/bin/bash #通过.号来引用test1.sh文件,这样test1.sh中的东西test2.sh就能用了 . ./test1.sh echo "$url"
Shell编程学习总结的更多相关文章
- Linux 下shell 编程学习脚手架
linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...
- shell编程学习之使用jq对json数据进行提取
shell编程学习之使用jq对json提取 jq命令允许直接在命令行下对JSON进行操作,包括分片.过滤.转换等 ,jq是用C编写,没有运行时依赖,所以几乎可以运行在任何系统上.预编译的二进制文件可以 ...
- Linux Shell编程学习笔记——目录(附笔记资源下载)
LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...
- shell编程学习笔记(一):编写我的第一段代码
目前在学习Shell编程,我会把我的学习笔记记录在这里.大神可以直接略过~ 嗯,第一段代码,肯定是要输出Hello World了~ 以下蓝色字体的内容为linux命令,红色字体的内容为输出的内容: # ...
- shell编程学习笔记之sed编辑器
在shell编程中,大多数处理的都是文本文件.对文本文件进行处理除了使用交互式文本编辑器(vi[m],gedit......)也可以使用另外一类:流编辑器. 流编辑器:使用预定义的编辑规则来对文本进行 ...
- shell编程学习1
1.shell是操作系统的终端命令行 (1)shell可以理解为软件系统提供给用户操作的命令行界面,可以说它是人机交互的一种方式. (2)我们可以使用shell和操作系统.uboot等软件系统进 ...
- shell编程学习笔记【原创】
本文为本人学习笔记,如有转载请注明出处,谢谢 一.Bourne Shell 有如下四种变量: 用户自定义变量 位置变量,即命令行参数 预定义变量 环境变量 二.位置变量 $ 与键入的命令行一样,包含脚 ...
- (七)shell编程学习
1.shell程序练习:创建一个dir文件夹,在dir文件夹里再创建一个cd.c文件 首先vim hello.sh 2.shell中的变量定义和引用 (1)变量定义和初始化.shell是弱类型语言(语 ...
- shell编程学习笔记(十):Shell中的for循环
shell编程中可以实现for循环遍历 先来写一个最简单的吧,循环输出从1到10,脚本内容为: #! /bin/sh for i in {1..10} do echo $i done 上面的代码从1到 ...
- shell编程学习笔记(八):Shell中的if条件判断
编程语言中都有条件判断,shell编程也不例外,下面我们来看一下shell中应该怎么使用if条件判断 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts ...
随机推荐
- maven私有库搭建
一.在企业中基本上都会有自己的maven私有库,主要的目的就是方便依赖包的下载.如果采用远程的方式来实现的话,很多时候会考虑网速问题.如果自己活着公司搭建的私有库,这一样在使用上面会效率更高. 二.私 ...
- .net MVC 图片水印,半透明
filter:alpha(opacity=50):这个是为IE6设的,可取值在0-100,其它三个0到1.-moz-opacity:0.5; 这个是为了支持一些老版本的Mozilla浏览器.-khtm ...
- 「日常训练」Duff in the Army (Codeforces Round #326 Div.2 E)
题意(CodeForces 588E) 给定一棵\(n\)个点的树,给定\(m\)个人(\(m\le n\))在哪个点上的信息,每个点可以有任意个人:然后给\(q\)个询问,每次问\(u\)到\(v\ ...
- Xpath语法&示例
一.选取节点常用的路径表达式: 表达式 描述 实例 nodename 选取nodename节点的所有子节点 xpath(‘//div’) 选取了div节点的所有子节点 / 从根节点选取 xpath ...
- Linux命令大全(非常全,史上最全)
最近学习Linux,最大的体验就是它的很多东西都需要由命令来进行控制,下面是我总结的一些命令,供大家参考: 系统信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 una ...
- 第5章 Linux网络编程基础
第5章 Linux网络编程基础 5.1 socket地址与API 一.理解字节序 主机字节序一般为小端字节序.网络字节序一般为大端字节序.当格式化的数据在两台使用了不同字节序的主机之间直接传递时,接收 ...
- 【swiper】 滑块组件说明
swiper 滑块视图容器,其原型如下: <swiper indicator-dots="[Boolean]" indicator-color="[Color]&q ...
- hdu刷题2
hdu1021 给n,看费波纳列数能否被3整除 算是找规律吧,以后碰到这种题就打打表找找规律吧 #include <stdio.h> int main(void) { int n; whi ...
- 持续集成之TeamCity 配置
xcopy /S /Y CodeFirstDemo\CodefirstDemo.Web D:\publish\welcome\Web
- ThinkPHP - 1 - 本地部署
ThinkPHP ThinkPHP是一个快速.简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时 ...