一文学会shell编程

本文是一篇详尽的Shell编程教程,涵盖了基础介绍、Linux命令、流程控制概念、实例解析等内容,旨在帮助读者从入门到精通Shell编程。通过学习,你可以掌握变量、流程控制语句、Linux命令行工具的使用,以及如何编写实用的Shell脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前些天找到了一篇之前保存在有道云的shell笔记,感觉覆盖面很广,很适合学习或者复习,所以转移到csdn上来。内容比较长,有兴趣的可以边练习边看,希望大家一起学习交流。

目录

0、基础介绍

1、相关Linux命令

2、 概念: 管道, 重定向和 backtick

3、流程控制

快捷操作符

引号

Here document.

 函数

命令行参数

4、实例

文件循环程序

调试


0、基础介绍

shift 作用:使位置参数向左移动,默认移动1位,可以使用shift 2
exit  退出整个程序
break 结束当前循环,或跳出本层循环
continue 忽略本次循环剩余的代码,直接进行下一次循环

文件的第一行:
#!/bin/sh
注释
以#开头的句子表示注释,直到这一行的结束。
局部变量
 #!/bin/sh
#对变量赋值,不需要声明:
a="hello world"
# 现在打印变量a的内容:
echo "A is:"
echo $a
结果:"A is:
            hello world
在字符串中打印变量:
num=2
echo "this is the ${num}nd"
全局变量。
由export关键字处理过的变量叫做环境变量。
 简单介绍一下export的作用:
当Bash shell执行一个程序时,将首先为该程序建立一个新的执行环境,称为子shell。
在Bash Shell中变量都是局部的,它们只在创建它们的子Shell中有意义。
使用export后,变量被设置为全局变量,这时可以被其它子Shell所识别 。

 

1、相关Linux命令

echo "some text": 将文字内容打印在屏幕上


ls: 文件列表


wc -l filewc -w filewc -c file&: 计算文件行数计算文件中的单词数计算文件中的字符数


cp sourcefile destfile&:文件拷贝


mv oldname newname :重命名文件或移动文件


rm file&:删除文件


grep 'pattern' file&: 在文件内搜索字符串比如:grep 'searchstring' file.txt


cut -b colnum file&: 指定欲显示的文件内容范围,并将它们输出到标准输出设备,比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令


cat file.txt:输出文件内容到标准输出设备(屏幕)上-------查看文件


file somefile&:得到文件类型


read var: 提示用户输入,并将输入赋值给变量


sort file.txt: 对file.txt文件中的行进行排序


uniq: 删除文本文件中出现的行列,比如: sort file.txt | uniq


expr: 进行数学运算,Example: add 2 and 3expr 2 "+" 3


find: 搜索文件,比如:根据文件名搜索find . -name filename -print


tee: 将数据输出到标准输出设备(屏幕) 和文件,比如:somecommand | tee outfile


basename file&: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux


dirname file&: 返回文件所在路径比如:dirname /bin/tux将返回 /bin


head file&: 打印文本文件开头几行


tail file : 打印文本文件末尾几行


sed: Sed是一个基本的查找替换程序。格式:sed 's/要替换的字符串/新的字符串/g' 比如:将linuxfocus 替换为 LinuxFocus :cat text.file | sed 's/linuxfocus/LinuxFocus/g' > newtext.file


awk: awk 用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。cat file.txt | awk -F, '{print $1 "," $3 }'这里我们使用,作为字 段分割符,同时打印第一个和第三个字段。如果该文件内容如下:Adam Bor, 34, IndiaKerry Miller, 22, USA命令输出结果为:Adam Bor,   IndiaKerry Miller, USA


2、 概念: 管道, 重定向和 backtick

管道 (|) ,将一个命令的输出作为另外一个命令的输入。

grep "hello" file.txt | wc -l

在file.txt中搜索包含有"hello"的行并计算其行数。
在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。


 重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。

> :   写入文件并覆盖旧文件
>>:   加到文件的尾部,保留旧文件内容。


反短斜线:使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。

注意:反短斜线就是ESC下面那个小点。
命令:find . -mtime -1 -type f -print
用来查找过去24小时(-mtime -2则表示过去48小时)内修改过的文件。如果您想将
       所有查找到的文件打一个包,则可以使用以下脚本:
#!/bin/sh
# The ticks are backticks (`) not normal quotes ('):
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`

 

3、流程控制

 if语句内判断参数
–b 当file存在并且是块文件时返回真
-c 当file存在并且是字符文件时返回真
-d 当pathname存在并且是一个目录时返回真
-e 当pathname指定的文件或目录存在时返回真
-f 当file存在并且是正规文件时返回真
-g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
-h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
-k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
-p 当file存在并且是命令管道时返回为真
-r 当由pathname指定的文件或目录存在并且可读时返回为真
-s 当file存在文件大小大于0时返回真
-u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
-w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
-o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。


Shell 里面比较字符写法:
-eq   等于
-ne&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值