转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8176137.html

一:脚本文件的创建、格式、运行

1:创建shell脚本

首先,要创建一个文件

touch 文件名

然后,编辑该文件,将命令输入其中。

脚本文件第一行,需要指明使用的shell种类:

#! shell的路径
比如:
#!/bin/bash

脚本的注释符号是井号 #。

#注释

一般脚本格式为:

#!/bin/bash
#脚本注释:介绍脚本的用途
命令行、代码

2:改变文件权限

默认创建的文件没有执行权限,需要收到赋予。

chmod u+x 文件名

3:执行文件

对于经常执行的文件,需要将shell脚本所处目录添加到PATH环境变量去,这样,每次只需输入脚本名即可运行。

对于一次性使用的,则通过路径来启动:

./脚本名  :运行当前目录下的脚本文件
/.../.../脚本名 :通过绝对路径运行某个脚本文件

二:基本操作

1:打印输出

echo 内容
例如:
echo "字符串"
echo $变量名 将命令行结果输出到字符串后面:
echo -n "字符串: "
command

2:使用环境变量

可以通过 set 命令查看系统中的环境变量。

在脚本中,可以通过  $环境变量名 来引用。

3:使用用户变量

shell编程的变量不需要声明后使用,直接赋值就是声明。

引用变量可以  $变量名 或者  ${变量名}  来引用。

var=value  :赋值的同时即声明
$var ${var} :引用变量
var2 = $var1 :变量之间的赋值:后者必须用 $ ,否则相当于字符串赋值给var2

4:提取命令输出

将命令的输出赋值给变量,有两种方法:

反引号法:

var=`command` :用反引号括住命令,那么命令的执行就自动提取给变量

美元括号法:

var=$(command)  :用括号将命令括住,命令的运行结果被提取赋值给变量

5:重定向输入输出

输出重定向:

command > 文件:将输出写入文件(覆盖)
command >> 文件 :将输出追加到文件

输入重定向:

command < 文件 

6:管道

将一个命令的输出作为另一个命令的输入。

command1 | command2 

[一般,最常用的场景是:将命令行产生的大量输出,通过管道传送给more显示]

7:进行数学运算

法一(不推荐):expr

expr 运算表达式

法二:方括号法

$[运算表达式]

注意:bash中是数学运算针对整数,如果涉及浮点数,一般需要借助外在程序。

8:退出脚本

exit [退出码]

查看退出码:

$?  :保存了最近一个脚本的退出码

三:结构化命令——基本语句

1:条件语句

if [condition]
then
commands
elif [condition]
then
commands
else
commands
fi 或者
if [condition]; then
commands
fi

判断条件主要包括:非空判断、数值比较、字符串比较、文件比较等。

非空判断:

if [$变量]  :变量是否为空

数值比较:(注意:如果用符号来比较,需要转义!)

    -eq (equal)           等于,如:if [ "$a" -eq "$b" ]
-ne (not equal) 不等于,如:if [ "$a" -ne "$b" ]
-gt (greater than) 大于,如:if [ "$a" -gt "$b" ]
-ge (greater equal) 大于等于,如:if [ "$a" -ge "$b" ]
-lt (less than) 小于,如:if [ "$a" -lt "$b" ]
-le (less equal) 小于等于,如:if [ "$a" -le "$b" ]
< 小于(需要双括号),如:(("$a" < "$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))
> 大于(需要双括号),如:(("$a" > "$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))

字符串比较:(注意:如果用符号来比较,需要转义!)

=       等于,如:if [ "$a" = "$b" ]
== 等于,如:if [ "$a" == "$b" ], 与=等价
注意:==的功能在[[]]和[]中的行为是不同的,如下:
[[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true
[[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true [ $a == z* ] # File globbing 和word splitting将会发生
[ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true != 不等于,如:if [ "$a" != "$b" ], 这个操作符将在[[]]结构中使用模式匹配.
< 小于,在ASCII字母顺序下.如:
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ] 在[]结构中"<"需要被转义.
> 大于,在ASCII字母顺序下.如:
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ] 在[]结构中">"需要被转义.
-z 字符串为"null".就是长度为0.
-n 字符串不为"null"

文件比较:

-d file:检查file是否一个目录
-e file:检查file是否存在
-f file:检查file是否是一个文件
-r file:检查file是否存在且可读
-s file:检查file是否非空
-w file:检查file是否可写
-x file:检查file是否可执行
-O file:检查file是否属于当前用户
-G file:检查file存在的默认组是否与当前用户相同
file1 -nt file2:file1是否比file2新
file1 -ot file2:file1是否比file2旧

条件复合:

与: [ condition ] && [ condition ]
或: [ condition ] || [ condition ]

高级特性

双括号:在双括号内进行更复杂的数学运算

if ((高级运算))

高级运算主要有:
++
--

~
**
>>
<<
&
|
&&
||

双方括号:进行高级字符串比较运算

if [[高级字符串运算]]

高级字符串运算主要是指:模式匹配
例如:
if [[$var == r*]]

case语句:

case $变量 in
pattern1) commands;; #注意,两个分号!
pattern2 | pattern3)
commands;;
*) #其他情况
commands;;

2:循环语句

for-in语句:

for var in list
do
commands
done

列表中的符号、空格怎么处理:转义  或者  用双引号将符号与单词合并

list:可以是变量($变量)、可以是命令的输出( $(command) )、可以是某目录下的通配符( for file in /../../*)

for循环语句:

for ((i = 起始值;i < 临界值; i++))
do
command
done

while语句:

while [ condition ]
do
command
done

until语句:

until [ condition ]
do
command
done

跳出循环:

break:跳出当前循环

break n:跳出第n层循环,当前循环为1,往外数递增。

continue:终止当前次循环,开启下一次循环

重定向循环的输出:

各种循环语句
......
......
done > 输出文件

Shell脚本编程基础笔记一的更多相关文章

  1. Shell脚本编程基础笔记二

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8177697.html 一:输入 1:运行时参数 可以在启动脚本时,在其后输入参数. ./脚本 参数1 参数2. ...

  2. Linux shell脚本编程基础之练习篇

    shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...

  3. SHELL脚本编程基础知识

    SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...

  4. shell脚本编程基础介绍

    Linux系统——shell脚本编程基础介绍 1.什么是shell 它是一个命令解释器,在linux/unix操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种操作输出的结果 ...

  5. linux基础—课堂随笔_03 SHELL脚本编程基础

    shell脚本编程基础 条件选择:if语句 选择执行: 注意:if语句可嵌套 单分支 if(开头)判断条件:then条件为真的分支代码 fi(结尾) 双分支 if(开头)判断条件:then条件为真的分 ...

  6. shell脚本编程基础

       最近学习了shell脚本编程,感觉自己的脚本写的不太好,所以想把shell脚本相关的知识系统的整理一下,便于以后的学习和使用. 一.shell脚本基础    shell脚本是利用shell的功能 ...

  7. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---57

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  8. Linux Shell脚本编程-基础1

    概述:  shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础 ...

  9. Shell 脚本编程基础

    通过本文记录学习Linux Shell的一些笔记思考和总结,以加强记忆和理解.主要学习参考资料有: 1.<鸟哥的Linux私房菜-基础篇>第四版 2.菜鸟教程——Linux教程 3.ear ...

随机推荐

  1. 基于struts研究传值问题

    一.新建项目 struts 1.file——>new——>Web Project——>取名struts——>finsh——>将之前项目下的jar包copy到该项目下 2. ...

  2. python 全栈开发,Day92(编程式的导航,vue页面布局,marked包的使用)

    昨日内容回顾 1. 组件间的传值 1. bus --> 空Vue对象 通过向bus对象抛出自定义事件的方式在组件间传递信息 2. 注意事项: 1. bus.$on()应该在组件mounted(挂 ...

  3. flex布局简介

    一.概述 浮动在移动布局中不再重要,flex盒模型越来越重要. flexbox经历过三个版本,主要区别是2009年到2012年之间的语法变化. 最新的语法和现在规范是同步的(例display:flex ...

  4. 6-5 巡逻机器人 uva1600

    一开始按照标准bfs来写  标记为二维数组 后来按照三维数组写过了    ps大部分bfs都不会是二维数组搞定!!! 其中有一个bug弄了半个小时... 一开始我是先判断!vis[x][y][v.c] ...

  5. moodleform -转载于blfshiye

    Form API 表单API 文件夹 1.概述 2.亮点 3.使用方法 4.表单元素 4.1 基本表单元素 4.2 定制表单元素 5.经常使用函数 5.1  add_action_buttons($c ...

  6. Scala面向接口

    trait Logger{ def log(message:String){ println("Logger:"+message) } } trait RichLogger ext ...

  7. Java 之递归遍历目录

    Java 之递归遍历目录 一.内容 输出指定目录(文件夹)下的所有文件(包括目录)的绝对路径 二.源代码:RecursiveListDirectory.java package cn.com.zfc. ...

  8. Gym - 100548G The Problem to Slow Down You

    依然是回文树. 我们只需要吧siz[]改成统计两边的siz[][0/1],然后把两个字符中间随便加一个不会出现的字符拼起来,做一遍回文树统计一下就OJBK了 #include<bits/stdc ...

  9. HDU.3516.Tree Construction(DP 四边形不等式)

    题目链接 贴个教程: 四边形不等式学习笔记 \(Description\) 给出平面上的\(n\)个点,满足\(X_i\)严格单增,\(Y_i\)严格单减.以\(x\)轴和\(y\)轴正方向作边,使这 ...

  10. Java并发程序设计(七)乐天派:无锁

    无锁 一.概述 无锁是处理并发的一种乐观策略,它会假设对资源的访问是没有冲突的.既然没有冲突自然不需要等待,所以所有的线程都可以在不停顿的状态下执行.那遇到冲突怎么办?接下来请看,无锁绝招“CAS”即 ...