Linux shell脚本的建立与执行

本文介绍了Linux Shell脚本的基础知识,包括脚本的编写、执行方法及常用的Shell命令。通过实例讲解了变量、流程控制等内容。

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

在进行 linux 测试时编写脚本是必不可少的。最近经常使用 Linux,感觉太频繁地敲击键盘有些累了,于是想到了 Shell 脚本。可以把太多的命令写成一个脚本,这样每次执行一遍 shell 文件,就可以省去了敲击键盘的时间。于是在网上搜了一些有关 Linux 下脚本编程的内容。

Shell 不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用 shell 使大量的任务自动化,shell 特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。

用户可以使用任何文本编辑器编辑 shell 脚本文件,例如 VI、gedit 等。

Shell 脚本的名称可以随便定义,也不要什么后缀名,例如可以写 abc,smartzip 这类名称。

下面我们开始编写一个 Shell 脚本:

1. 程序必须以下面的行开始(必须放在文件的第一行):
#!/bin/sh
符号 #! 用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用 / bin/sh 来执行程序。

2. 注释
在进行 shell 编程时,以 #开头的句子表示注释,直到这一行的结束。如同其他编程语言一样,我们在编写脚本时也应该尽可能地添加注释,那么即使相当长的时间内没有使用该脚本,我们也能在很短的时间内明白该脚本的作用及工作原理。

3. 变量
在其他编程语言中您必须使用变量。在 shell 编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写:变量名 = 值
取出变量值可以加一个美元符号($)在变量前面: 
#!/bin/sh
#对变量赋值:
a="hello world"
 # 现在打印变量 a 的内容:
echo "A is:"
echo $a

4. Shell 命令和流程控制
在 shell 脚本中可以使用三类命令:
1)Unix 命令:
       虽然在 shell 脚本中可以使用任意的 unix 命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。
常用命令语法及功能
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 是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。不要和 shell 中的通配符相混淆。比如:将 linuxfocus 替换为 LinuxFocus :cat text.file | sed ''s/linuxfocus/LinuxFocus/'' > newtext.fileawk: awk 
用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用 - F 指定其他分割符。cat   file.txt | awk -F, ''{print $1","$3}''这里我们使用,作为字段分割符,同时打印第一个和第三个字段。如果该文件内容如下: AdamBor, 34, IndiaKerry Miller, 22, USA 命令输出结果为:AdamBor, IndiaKerry Miller, USA

 2) 概念: 管道, 重定向和 backtick
这些不是系统命令,但是他们真的很重要。管道 (|) 将一个命令的输出作为另外一个命令的输入。
grep "hello" file.txt | wc -l
在 file.txt 中搜索包含有”hello” 的行并计算其行数。
在这里 grep 命令的输出作为 wc 命令的输入。当然您可以使用多个命令。
重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。
>  写入文件并覆盖旧文件
>> 加到文件的尾部,保留旧文件内容。
反短斜线
使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。
命令: 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" 表达式 如果条件为真则执行 then 后面的部分: 
 if ....; then
....
elif ....; then
....
 else
 ....
 fi
大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等… 通常用 "[ ]" 来表示条件测试。注意这里的空格很重要。要确保方括号的空格。 
 [-f "somefile"] :判断是否是一个文件
 [-x "/bin/ls"] :判断 / bin/ls 是否存在并有可执行权限
 [-n "$var"] :判断 $var 变量是否有值
 ["$a" = "$b"] :判断 $a 和 $b 是否相等

5. 执行脚本
Linux 下的 sh 文件默认是有执行权限的。我们可以用命令:ls -l file_name 来查看用户对文件的权限。如果没有执行权限,可以执行以下命令添加:chmod +x file_name 。然后可以通过运行:sh XX.sh 这样的命令来运行脚本。当然不同的系统可能不完全相同,需要根据实际情况来。例如有的 Linux 下是./XX.sh 就可以运行。

概括地来说,shell 对 shell 脚本的调用可以采用 3 种方式:

(1)一种是将文件名作为 shell 命令的参数,其调用格式为:

          $ Bash script_file

          当要被执行的脚本文件没有可执行权限时,只能使用这种调用方式。

(2)另一种调用的方法是先将脚本文件的访问权限更改为可执行,以便该文件可以作为执行文件调用。

         具体的方法是:$chmod +x  script_file

                                  $PATH=$PATH:$PWD

                                   $script_file

 (3)当执行一个脚本文件时,Shell 就产生了一个 Shell(即一个子进程) 去执行文件中的命令。因此,脚本文件的变量值不能传递到当期 Shell(即父进程)。为了使脚本文件中的变量值传递到当前 Shell,必须在命令文件名前面加 “.”。即:

           $./script_file

“.” 命令的功能是在当前 shell 中执行脚本文件中的命令,而不是产生一个子 shell 执行命令文件中的命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值