首页 > 系统相关 >shell编程基础

shell编程基础

时间:2022-10-18 17:00:40浏览次数:36  
标签:bin 文件 shell .... 编程 基础 echo file


一、为什么要实现shell编程

shell集合了大量命令,借助shell,大量任务可以实现自动化,提高效率。

 

二、脚本

1、代码:#!/bin/sh

符号#!用来告诉系统执行该脚本的程序。编辑完,如果要执行该脚本,还必须使其可执行:

chmod +x filename

这样输入:

./filename变可执行该脚本

 

2、变量

shell编程中的所有变量都由字符串组成,并且不需要声明,要给一个变量复制,你只需这么写:变量名=值(在变量名之前加一个$,就可以取出变量值

例1:

#!/bin/sh

#对变量赋值:

a=“lucas”

# 打印变量a的值:

echo “A is:” $a

例2:

用花括号告诉shell我们要打印num变量

num=2

echo “this is the ${num}nd”

输出结果:this is the 2nd

 

三、unix命令

1、在屏幕上输出信息:

echo “some text”

2、文件的计算

wc -l file 计算文件的行数

wc -w file 计算文件单词数

wc -c film 计算文件字符数

3、文件的拷贝:

cp sourcefile destfile

4、重命名文件或移动文件:

mv old name new name

5、删除文件:

rm file

6、在文件内搜索字符串或和正则表达式匹配的字符串:

grep ‘pattern’ file

7、将指定范围内的文件内容输出到标准输出设备(屏幕)上:

cut -b column file

例如:输出每行第5至9个字符

cut -b5-9 file.txt

8、输出文件内容到标准输出设备(屏幕)上:

cat file.txt

9、取得文件somefile的文件类型:

file somefile

10、提示用户输入,并将输入内容赋值给变量var:

read var

11、对file.txt文件所有行进行排序:

sort file.txt

12、uniq:只输出文件中内容不一致的行,如sort file.txt | uniq

13、expr:进行数学运算,如要进行2+3的运算,命令为:expr 2 “+” 3

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

15、tree : 将数据输出到标准输出设备(屏幕)和文件,例如:somecommand | tree outfield

16、basename file:返回不含路径的文件名,如:basename /bin/tux 会返回tux

17、dirname file:返回文件所在路径,如:dirname /bin/tux 会返回/bin

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

19、tail file 打印文本文件末尾几行

 

四、管道,重定向和backtick

1、管道(|)将一个命令的输出作为另一个命令的输入

代码:

grep “hello” file.txt | wc -l

上述命令会在file.txt中搜索包含有“hello”的行并计算行数,这里grep命令的输出成了wc命令的输入

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

代码:

>写入文件并覆盖旧文件

》加到文件的尾部,保留旧文件内容

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

代码:

find . -mtime -1 -type f -print

上述命令可以查找过去24小时(-mtime -2则表示过去48小时)内修改过的文件。如果你想将所有查找到的文件打一个包,则可以使用以下脚本:

代码:

#!/bin.sh

# The ticks are backticks(`) not normal quotes(`):

Tar -zcvf happy.tar.gz `find . -mtime -1 -type f -print`

 

五、流程控制

1、“if”表达式如果条件为真则执行then后的部分:

代码:

if ....; then
....
elif ....; then ....

else
.... fi

上述表达式经常可以比较字符串、判断文件是否存在及是否可读等等…通常用“[]”来表示条件测试,注意这里的空格很重要,要确保方括号前后的空格

代码:

[ -f “somefile”] :判断是否一个文件

[-x “/bin/ls”]:判断/bin/ls是否存在并有可执行权限

[ -n “$var”]:判断$var变量是否有值

[“$a”=“$b”]:判断$a和$b是否相等

执行man test 可以查看所有测试表达式可以比较和判断的类型

 

2、case表达式可以用来匹配一个给定的字符串,而不是数字

代码:

case … in 

…) do something here;;

esac

 

3、select表达式是一种bash的扩展应用,擅长交互式使用。用户可以从一组不同的值中进行选择。

代码:

select var in ... ; do
break
done
.... now $var can be used ....

例如:

你也可以在shell中使用如下的loop表达式:

while ...; do ....
done

while-loop 将运行直到表达式测试为真。will run while the expression that we test for is true. 关键字"break" 用来跳出循环。 而关键字”continue”用来不执行余下的部分而直接跳到下一个循环。 

 

for-loop表达式查看一个字符串列表 (字符串用空格分隔) 然后将 其赋给一个变量: 

for var in ....; do ....
done

 

六、单引号和双引号的区别

单引号更严格一些。它可以防止任何变量扩展。双引号可以防止通配 符扩展但允许变量扩展。 

#!/bin/sh 

echo $SHELL

echo "$SHELL"

echo '$SHELL'

运行结果为:

/bin/bash

/bin/bash

$SHELL

 

七、调试

      最简单的调试命令当然是使用 echo 命令。您可以使用 echo 在任何怀 疑出错的地方打印任何变量值。这也是绝大多数的 shell 程序员要花费 80%的时间来调试程序的原因。Shell 程序的好处在于不需要重新编译, 插入一个 echo 命令也不需要多少时间。 

        shell也有一个真实的调试模式。如果在脚本"strangescript" 中有 错误,您可以这样来进行调试: 

sh -x strangescript ,这将执行该脚本并显示所有变量的值。
        shell 还有一个不需要执行脚本只是检查语法的模式。可以这样使用: 

sh -n your_script ,这将返回所有语法错误。

 

 

.

 

 

 

      

标签:bin,文件,shell,....,编程,基础,echo,file
From: https://blog.51cto.com/u_15834920/5767629

相关文章

  • Shell实用脚本编写思路
    归档备份步骤创建归档目录配置文件(源)读出归档配置文件的目录名(exec+read)判断配置文件中目录是否存在(-d)判断目录名里面的文件是否存在(-f)创建归档存放的目录......
  • Jmeter添加BeanShell后置处理程序保存响应结果
    对于某些请求,无法通过保存响应到文件这个组件来进行保存(会出现UNKNOW文件类型)。那么就可以通过BeanShell后置处理程序来进行将响应结果直接输出到文件,并可以直接指定文件......
  • ShellProgressBar控制台中漂亮的显示进度条
    ShellProgressBar控制台中漂亮的显示进度条ShellProgressBar库的使用控制台程序有时也需要进度条来显示任务执行的详细进度,最近就发现了一个第三方的类库叫ShellProgress......
  • 『现学现忘』Git基础 — 35、Git中删除文件
    目录1、删除文件说明2、删除文件操作(1)仅删除暂存区的文件(2)完全删除文件3、本文用到的命令总结1、删除文件说明在Git工作目录中要删除某个文件,首先要清楚该文件所处的状态......
  • 用 Kotlin 的函数式编程 替代 GOF 设计模式
    用Kotlin的函数式编程替代GOF设计模式函数式编程(FP)值就是函数,函数就是值。所有函数都消费函数,所有函数都生产函数。"函数式编程",又称泛函编程,是一种"编程范式"(prog......
  • C语言零基础入门-文件
    C语言零基础入门-文件这节课的主要内容:1,文件的基本知识。2,文件操作实例。1.基础知识1.1基础概念1.1.1文件这个概念不用说大家应该都知道是什么,虽然自己的定义可能不是很......
  • C语言零基础入门-结构体-01
    C语言零基础入门-结构体-01这节课的主要内容:1,什么是结构体。2,结构体的定义以及使用。1.什么是结构体这个问题就变得有意思了,为什么呢?因为他可以与我们之前的学习紧密相关了......
  • C语言零基础入门-06-习题
    C语言零基础入门-06-习题本节课的任务是: 布置5道指针的习题。习题01给定的5个整数(9,7,5,6,2),书写子函数进行排序,按照由小较大的顺序输出。要求:子函数之间数据传递使用指针进行。......
  • 45、shell编程-函数
    函数function是由多个shell组成的语言块,实现代码重用和模块化编程,与shell类型,不同点为shell程序运行会单独开启进程,而函数不会开启进程,是在当前shell环境中运行,可影响当前sh......
  • C语言零基础入门-指针-03
    C语言零基础入门-指针-03本节要点:1,指针操作int类型数据。2,指针操作float,char类型数据。01.指针操作int类型数据其实这一小节主要是带大家回顾一下,因为前边我们已经讲了很多......