零基础学习Shell编程

一:起因

(0)也许由于一时的冲动使得你开始关注并学习shell编程;亦许由于是“道听途说”shell的威力很大;亦许由于shell编程的魅力;亦许由于作为一个coder的偏好;亦许……

(1)先来搞清楚为什么要学shell,学习要有目的性 ---- 简单的说shell就是一个包含若干行Shell或者Linux命令的文件。对于一次编写,多次使用的大量命令,就可以使用单独的文件保存下来,以便日后使用。

shell简单、灵活、高效,特别适合处理一些系统管理方面的小问题

shell可以实现自动化管理,让系统管理员的工作变得容易、简单、高效

shell可以把一些经常需要用的命令或者操作,以文件的形式存储起来,每一次调用即可,不用重复的键入命令

shell脚本可移植性好,在unix/linux系统中可灵活移植,几乎不用任何设置就能正常运行

shell脚本可轻松方便读取和修改源代码,不需要编译   掌握shell可以帮你解决一些故障问题,比如脚本引起的故障问题

掌握shell是一个中级以上系统工程师必需要会的  掌握shell是你系统管理进阶的必经之路

掌握shell是你面试更高级职位的一块敲门砖

(2)那什么时候不使用Shell 脚本?

资源密集型的任务,尤其在需要考虑效率时(比如排序,hash 等)

需要处理大任务的数学操作,尤其是浮点运算,精确运算,或者复杂的算术运算(这种情况一般使用C++或FORTRAN 来处理)

有跨平台移植需求(一般使用C 或Java)  复杂的应用,在必须使用结构化编程的时候(需要变量的类型检查,函数原型,等等)

对于影响系统全局性的关键任务应用。  对于安全有很高要求的任务,比如你需要一个健壮的系统来防止入侵,破解,恶意破坏等等.   项目由连串的依赖的各个部分组成。

需要大规模的文件操作   或 需要多维数组的支持   需要数据结构的支持,比如链表或数等数据结构

需要产生或操作图形化界面 GUI     需要直接操作系统硬件    需要 I/O 或socket 接口

需要使用库或者遗留下来的老代码的接口  私人的,闭源的应用(shell 脚本把代码就放在文本文件中,全世界都能看到)

如果你的应用符合上边的任意一条,那么就考虑一下更强大的语言吧--或许是Perl,Python,Ruby, 或者是更高层次的编译语言比如C/C++,Java

二:知识点介绍

(1)从脚本编写和执行开始 —— 编写用vim即可,保存为filename.sh文件即可;执行前需要更改为可执行文件或者sh filename.sh来执行:

1)通常shell脚本以.sh为后缀。在编写shell时,第一行一定要指明系统需要哪种shell解释用户的shell程序,如:#!/bin/sh,#!/bin/bash,#!/bin/csh,,#!/bin/tcsh和,#!/bin/ksh等。下面的run.sh则指明使用bash执行。
#!bin/bash
ls -l
通常,shell脚本会以#!/bin/sh作为默认的shell程序。执行shell的方式有两种:第一种是为shell脚本加上可执行权限并执行,第二种是通过sh命令执行shell脚本,例如执行当前目录下的run.sh脚本,命令如下:
//为shell脚本直接加上可执行权限并执行
chmod 755 run.sh
./run.sh

2)//通过sh命令执行shell脚本

sh run.sh
注意:那为何『 sh shell.sh 』也可以运行呢?
这是因为 /bin/sh 其实就是 /bin/bash(连结档),使用 sh shell.sh 亦即告诉系统,我想要直接以 bash 的功能来运行 shell.sh 这个文件内的相关命令的意思,所以此时你的 shell.sh 只要有 r 的权限即可被运行喔!而我们也可以利用 sh 的参数,如 -n 及 -x 来检查与追踪 shell.sh 的语法是否正确呢
sh -x filename.sh
这会执行脚本并显示脚本中所有变量的取值,也可以使用参数-n,它并不执行脚本,只是返回所有的语法错误。

(2)下面我们从经典的“hello world”入手,看一看最简单的Shell脚本的模样

sudo vim hello.sh:

#!/bin/sh
#print hello world in the console window
a="hello world"
echo "Hi, ${a}s"

chmod 755 hello.sh 更改为可执行文件 rwx(4,2,1)

sh hello.sh 或者 ./hello.sh

(3)shell里的特殊字符

和其他编程语言一样,shell里也有特殊字符。常见的有美元符号($),反斜线(\)和引号。

1)美元符号

美元符号表示变量替换,即用其后面指定的变量的值来代替变量。反斜线“\”为转义字符,转义字符告诉shell不要对其后面的那个字符进行特殊处理,只是当做普通字符。

2)双引号(")

由双引号括起来的字符,除$,倒引号(`)和反斜线(\)仍保留其特殊功能外,其余字符均作为普通字符对待。
3)单引号(')
由单引号括起来的字符都作为普通字符出现。

4)倒引号(`) tab键上面那个原始字符

由倒引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行该命令,并以它的标准输出结果取代整个引号部分。

5)示例

示例1的代码及输出如下:
#echo "My current directory is `pwd` and logname is $LOGNAME"【双引号中的倒引号和美元符号保持原来的功能】
My current directory is /root and logname is root
示例2的代码及输出如下:
#echo "My current directory is `pwd` and logname is \$LOGNAME"【双引号中的转义字符保持原来的功能】
My current directory is /root and logname is $LOGNAME
示例3的代码及输出如下:
#echo 'My current directory is `pwd` and logname is $LOGNAME'【单引号里面的内容不变】
My current directory is `pwd`and logname is $LOGNAME

6)变量

shell的变量非常类似于JS 和 python,不用声明;但是有一点需要注意,变量和等号(即等号前后无任何空格)如 num=10;但是if [ ${num} eq 10 ];then …… fi 这其中的空格必须得有的

(4)shell脚本的注释

shell脚本和其它编程语言一样,也拥有注释。注释方法为在注释行前加#号。
例如以下脚本:
#!/bin/sh  
#Filename: comment.sh  
#Description:this script explains how to make a comment  
echo “This script explains how to make a comment ”  

创建脚本时,脚本的第一行通常称为shbang(#!)行。当脚本启动后,UNIX内核检查文件的第一行以决定将要执行的程序类型。

shbang符号(#!)后面的路径是用来解释此脚本的shell位置。要正确使用这个特性,#!必须是文件中最前面的两个字符。如果
文件头部有空格字符或者空白行,则此特性被忽略,该行被解释为普通的注释行。

(5)再看sh脚本执行的奥秘

打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了。
输入一些代码:
#!/bin/bash
echo "Hello World !"
“#!” 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。echo命令(最好用$printf ""具有更好的可移植性)用于向窗口输出文本。
将上面的代码保存为test.sh,并 cd 到相应目录:

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

注意,一定要写成./test.sh,而不是test.sh。运行其它二进制的程序也一样,直接写test.sh,linux系统会去PATH里寻找有没有叫test.
sh的,而只有/bin, /sbin, /usr/bin,/usr/sbin等在PATH里,你的当前目录通常不在PATH里,所以写成test.sh是会找不到命令的,要用./test.sh告诉系统说,就在当前目录找。
通过这种方式运行bash脚本,第一行一定要写对,好让系统查找到正确的解释器。
这里的"系统",其实就是shell这个应用程序(想象一下Windows Explorer),但我故意写成系统,是方便理解,既然这个系统就是指shell,那么一个使用/bin/sh作为解释器的脚本是不是可以省去第一行呢?是的。

三:体会心得

(1)简单的说shell就是一个包含若干行Shell或者Linux命令的文件。对于一次编写,多次使用的大量命令,就可以使用单独的文件保存下来,以便日后使用。
例如:你用c编写一个工程,里面有很多.h文件,.c文件等等,每一次更改你都得需要重新 g++ filenames.c filenames.h -o filenames,过于麻烦,这时就需要编写一个小小shell文件,就可以解决问题了。

(2)记得自己上次写python的基础学习,应该是一个月前了,这次重新学一个新的语言(脚本语言),间隔的时间非常短;越发的感觉,必须掌握精通一门语言,之后学习其他语言非常容易上手 —— 仅仅是入门,如果想在某一门语言上进阶或者深入,只能说“路漫漫其修远兮亦”!

(3)我在这里就不误人子弟了,详细的shell入门详见 鸟哥私房菜  或者 shell脚本教程 

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
当你使用 Unix 或类 Unix 操作系统时,Shell 是必不可少的工具。Shell 是一个命令行解释器,它接受用户输入的命令并执行它们。在本文中,我们将介绍 Shell 编程基础知识,包括变量、条件语句、循环等。 1. 变量 变量是 Shell 编程中的基本概念之一。变量用于存储数据,可以是字符串、数字或任何其他类型的数据。在 Shell 中,变量名通常是大写字母,但这不是必需的,只是一种命名约定。 定义变量: ``` variable_name=value ``` 例如,定义一个名为 `my_name` 的变量: ``` my_name="John Doe" ``` 使用变量: ``` echo $my_name ``` 输出: ``` John Doe ``` 2. 输入和输出 在 Shell 中,有几种输出文本的方法。最常用的是 `echo` 命令,它可以输出一个字符串。 ``` echo "Hello World" ``` 输出: ``` Hello World ``` Shell 还有一些特殊字符,用于控制输出的格式。例如,`\n` 表示换行符。 ``` echo -e "Line 1\nLine 2" ``` 输出: ``` Line 1 Line 2 ``` 输入: Shell 中可以使用 `read` 命令从用户那里读取输入。 ``` echo "What is your name?" read name echo "Hello, $name!" ``` 输出: ``` What is your name? John Hello, John! ``` 3. 条件语句 在 Shell 中,可以使用条件语句来根据某个条件执行不同的操作。条件语句通常使用 `if`、`elif` 和 `else` 关键字。 ``` if [ $age -lt 18 ] then echo "You are not old enough to vote." elif [ $age -lt 21 ] then echo "You can vote, but you cannot drink." else echo "You can vote and drink." fi ``` 上面的代码将根据用户的年龄输出不同的消息。 4. 循环 在 Shell 中,可以使用循环来重复执行一些操作。常见的循环有 `for` 和 `while`。 `for` 循环: ``` for i in 1 2 3 4 5 do echo $i done ``` 输出: ``` 1 2 3 4 5 ``` `while` 循环: ``` i=1 while [ $i -le 5 ] do echo $i i=$((i+1)) done ``` 输出: ``` 1 2 3 4 5 ``` 5. 函数 在 Shell 中,可以定义函数来组织代码。函数通常使用 `function` 关键字定义。 ``` function hello { echo "Hello, $1!" } hello John ``` 输出: ``` Hello, John! ``` 上面的代码定义了一个名为 `hello` 的函数,它将输出 `Hello, $1!`,其中 `$1` 是传递给函数的第一个参数。 这是一个简单的 Shell 编程的入门介绍。要深入了解 Shell 编程,您可以查看更多的资料和教程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值