references:
http://home.lupaworld.com/home-space-uid-94908-do-blog-id-32301.html
http://sucre.iteye.com/blog/587673
Linux中有许多种不同的shell,通常我们使用bash (bourne again shell) 进行shell编程,因为bash不仅免费(自由)且易于使用
#!/bin/sh 符号#!用来告诉系统执行该脚本的程序,(必须放在文件的第一行)
所有变量都由字符串组成,并且不需要声明。
hmod +x filename # 使其可执
防止混乱
echo "this is the ${num}nd"
在shell脚本中可以使用三类命令:
1) Unix 命令:
#vvvvvv 以下命令可以--help查看具体细节 vvvvv
wc –l file wc -w file wc -c file: 分别计算文件的行数(line)、单词数(word,以空格为分格)和字符数(character)
grep 'pattern' file: 在文件内搜索字符串或和正则表达式匹配的字符串,pattern前后引号可用双引号,或去掉;
cut -c column file: 将指定范围内的文件内容输出到标准输出设备(屏幕)上。比如:输出每行第5至9个字符 cut -b5-9 file.txt
cat file.txt: 输出文件内容到标准输出设备(屏幕)上
file somefile: 取得文件somefile的文件类型
read var: 提示用户输入,并将输入内容赋值给变量var;可以通过$var取得,如echo $var
sort file.txt: 对file.txt文件所有行进行排序,对于非字符将去掉再排序;
uniq: 只输出文件中内容不一致/重复的行,如: sort file.txt | uniq;uniq file
expr: 进行数学运算,如要进行2+3的运算,命令为: expr 2 '+' '3'
find: 搜索文件,如根据文件名搜索:find . -name <filename> -print
tee: 将数据输出到标准输出设备(屏幕) 和文件,相当生成新的文件,比如:somecommand | tee outfile,如sort a.txt | tee b.txt
basename file: 返回不包含路径的文件名,如: basename /bin/tux 会返回 tux
dirname file: 返回文件所在路径,如:dirname /bin/tux 会返回 /bin
head [-n N] file: 打印文本文件开头几行,如果提供-n则打印头几行而不是默认10行;如果-N则不打印最后N行;
tail file : 打印文本文件末尾几行;同上
awk: awk 用来提取文本文件中的字段(不同于cut)。缺省的字段分割符是空格,可以使用 -F 指定其它分割符。cat file.txt | awk -F, '{print $1 "," $3 }',
这里我们使用 , 作为字段分割符,同时打印第一和第三个字段。如果该文件内容为 Adam Bor, 34, IndiaKerry Miller, 22, USA,
则上述命令的输出为:Adam Bor, IndiaKerry Miller
sed(StreamEDitor):为UNIX系统上提供将编辑工作自动化的编辑器(command),使用者无需直接编辑资料。
2) 概念
管道 (|) 将一个命令的输出作为另外一个命令的输入。
grep "hello" file.txt | wc -l #可以连续书写多个类似命令
重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。
代码:
> 写入文件并覆盖旧文件
>> 加到文件的尾部,保留旧文件内容。
反引号(backtick,即"`")
使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print` #1小时内修改的文件打包
3) 流程控制
查看更多测试表达式:man test
if ....; then
....
elif ....; then
....
else
....
fi
case表达式可以用来匹配一个给定的字符串,而不是数字。
case ... in
...) do something here ;; #must use double ';'
esac
e.g.:
#!/bin/sh
ftype=`file "$1"` #$1代表命令行输入的第一个参数
echo $ftype
case "$ftype" in
"$1: Zip archive"*) #匹配模式,代表以$1: Zip archive开头的字符串
unzip "$1" ;;
"$1: gzip compressed"*)
gunzip "$1";;
"$1: bzip2 compressed"*)
bunzip2 "$1" ;;
*) echo "File $1 can not be uncompressed with smartzip";;
esac
(no this command in ubuntu10)
select var in ... ; do
break;
done
.... now $var can be used ....
while ...; do
....(or continue,break)
done
for var in ....; do
$var can be used....
done
引号
在向程序传递任何参数之前,程序会扩展通配符和变量。这里所谓的扩展是指程序会把通配符(比如*)替换成适当的文件名,把变量替换成变量值。我们可以使用引号来防止这种扩展
a.引号(单引号和双引号)可以防止通配符*的扩展,通配作普通字符看待
b.其中单引号更严格一些,它可以防止任何变量扩展;而双引号可以防止通配符扩展但允许变量扩展(变量优先,没有则以普通字符看待)
当要将几行文字传递给一个命令时,用here documents是一种不错的方法
比如对每个脚本写一段帮助性的文字是很有用的,此时如果使用here documents就不必用echo函数一行行输出。
here document(use for comment)
cat << flag comment-to-write.....
flag
[编辑] Shell里的函数
functionname()
{
# inside the body $1 is the first argument given to the function
# $2 the second ...
body
}
#later usage:functionname (note:no '()' ended with functionname)
sh -x strangescript
上述命令会执行该脚本,同时显示所有变量的值。
sh -n your_script
这个命令会返回所有语法错误。
分享到:
相关推荐
SCSI Primary Commands - 4 (SPC-4) spc4r25 This is an internal working document of T10, a Technical Committee of Accredited Standards Committee INCITS (InterNational Committee for Information ...
标题中的"PyPI 官网下载 | robotpy-commands-v2-2021.2.2.2.tar.gz"表明这是一个从Python Package Index (PyPI) 下载的开源软件包,名为`robotpy-commands-v2-2021.2.2.2.tar.gz`。PyPI是Python开发者发布自己编写的...
标题"PyPI 官网下载 | django-schedule-commands-2020.12.24.tar.gz" 提供的信息表明,这是一个从Python Package Index(PyPI)官方源下载的软件包,名为"django-schedule-commands",版本号为2020.12.24,且已打包...
《PyPI官网下载:django-schedule-commands-2020.12.29.tar.gz》 在Python的世界里,PyPI(Python Package Index)是最重要的软件仓库,它为开发者提供了一个平台来发布和分享他们的开源Python项目。本文将深入探讨...
SCSI基础命令集协议第五版第19个修改版本;T10组织2018/02/14的最新协议草稿。 This is an internal working document of T10, a Technical Committee of Accredited Standards Committee INCITS (InterNational ...
SCSI Block Commands - 2 (SBC-2) Revision 16 13 November 2004
Juniper-commands-v2.xls
此SCSI Block Commands - 3 (SBC-3) 是一种 SCSI 标准,专门用于定义和规范块设备的命令和操作。块设备通常是存储设备,如硬盘驱动器和固态硬盘,这些设备以块为单位读写数据。SBC-3 标准包括了一组命令、数据传输...
在《Quectel-HCM111Z-AT-Commands-Manual-V1.0.0-Preliminary-20230916》这份文档中,详细介绍了HCM111Z蓝牙模块的相关AT命令,这对于开发人员来说是非常重要的参考资料。 #### 二、HCM111Z蓝牙模块概述 HCM111Z是...
SCSI Primary Commands - 4
"Laravel开发-artisan-commands-helper"项目就是针对Artisan命令的一个辅助工具,特别为在Docker环境中开发Laravel应用提供了便利。 首先,让我们深入理解Artisan命令助手。这个工具旨在简化在Docker环境中常见的...
SCSI_Primary_Commands-3 USB Mass Storage协议SCSI传输协议
"50-Most-Used-Linux-Commands-pdf.pdf" Linux 是一个功能强大且灵活的操作系统,广泛应用于服务器、超级计算机、嵌入式系统等领域。 Linux 命令行界面是 Linux 系统的核心部分,它提供了丰富的命令来管理和维护...
在`laravel-post-deploy-commands-master`压缩包中,你应该能找到一个示例或者模板,展示如何组织和使用这些命令。根据你的项目需求,你可以修改或扩展这个文件。 总的来说,`laravel-post-deploy-commands`是...
《Quectel EC200x系列AT命令手册》是为使用移远通信(EC200x)系列LTE标准模块的开发者和工程师提供的一份详细技术文档。该手册旨在帮助用户理解和掌握如何通过AT命令来控制和配置EC200x系列模块。...
"前端开源库 - command-line-commands" 正是这样一款专注于为应用程序提供类似Git命令界面的开源库。它允许开发者创建自定义的命令行界面,使用户能够通过熟悉的命令行操作与应用进行交互。 1. **命令行接口(CLI)的...
本指南,"creating-cl-commands-by-example.tgz",将通过实例深入浅出地讲解如何创建和使用CL命令。本文将详细阐述CL命令的基本概念、构建原理以及实际应用,旨在帮助读者快速掌握这一关键技能。 一、CL命令基础 ...
"Octave-Commands-源码.rar"是一个包含Octave命令源码的压缩文件,可能包含了Octave内置函数、扩展库或用户自定义函数的实现。尽管标签为空,我们可以从标题和描述中推测,这个压缩包的内容是关于Octave的命令源代码...