知乎高票回答:Bash处理一次性的琐碎事物,Python处理自动化,代码量较大的的维护任务。而需要效率的任务交给C/C++。
作为Linux开发人员,掌握Bash脚本是很重要的,但是最近吸收的东西太多了没办法都记住,所以一定要写写博客记录一下。
一个比较好的免费课程(shell脚本编程入门到精通):https://edu.aliyun.com/course/155?spm=5176.10731542.0.0.ATHyuM
一、创建步骤
开头:
#!/bin/bash
:#!
用作shell命令的完全路径,显示后期命令以哪种shell来执行这些命令。如不指定shell,以当前shell作为执行的shell。/bin/sh ->bash。
shell程序一般以.sh结尾。
创建shell程序的步骤:
- 创建一个包含命令和控制结构的shell文件。
- 修改这个文件的权限使它可以执行。
- 执行。1)./example.sh 2)绝对路径/root/test/example.sh 3)使用bash,不需要执行权限。bash example.sh。
二、shell变量
shell传递数据的一种方法。变量是用来代表每个值的符号名。分为临时/永久变量。
临时变量:是shell程序内部定义的,使用范围仅限于定义它的程序,对其它程序不可见。
永久变量:注意,是环境变量,其值不随着shell脚本的执行结束而消失。
调用方法:echo $PATH
(使用变量值时需要在前面加$)
环境变量非常重要,运行某个命令的时候,本地查找不到某个命令或文件,会到这个声明的目录中查找。
变量赋值:
关于$()和${}:
$()实际上括号里是系统命令的转化调用,如果你只是创建一个临时变量,那么会显示bash:command not found
,而如果想转换这种变量需要使用花括号即${}。
前面加上$
的变量表示调用该变量的值。
显示所有变量:set,多个单词用(“”/'')引号括起来即可。
单引号和双引号的区别:单引号之间的内容原封不动地指定给了变量。双引号取消了空格的作用,特殊符号的含义保留。
删除变量:unset name
位置变量和特殊变量:Shell解释执行用户的命令时,将命令行的第一个字作为命令名,而其它字作为参数。由出现在命令行上的位置确定的参数成为位置参数。
如:ls -l —> ls为命令名,-l为位置参数。
位置变量用$N来表示。如$0表示当前程序文件名,$N(1,……,n)表示命令行输入的参数。
特殊变量:有些变量是一开始执行Script脚本时就会设定,且不能被修改,但我们不叫它只读的的系统变量,而叫它特殊变量。这些变量当一执行程序时就有了,以下是一些特殊变量:
- $*:这个程序的所有参数
- $#:这个程序的参数个数
- $$:这个程序的PID
- $!:执行上一个后台程序的PID
- $?:执行上一个指令的返回值
综合实例:
一、参数
#!/bin/bash
echo "$* all parameters"//程序的所有参数
echo "$# parameters amount"//程序的参数个数
touch /tmp/a.txt
echo "$$ PID"//程序进程ID
touch /tmp/b.txt &
echo "$! Last PID"//执行上一个后台指令的PID
echo "$$ PID"//程序进程ID
运行后结果:
解释:
注意$$
是shell进程本身的PID,如果在shell script里,它就是shell script这个进程的PID。而touch后面我加了一个&
,这意味着它以后台运行。因此如果我在touch a的时候加入$!
,那么这个Last PID是没有值的。它是后台最后一个运行的进程的PID。
二、变量
#!/bin/bash
var1="abcd efg"
echo $var1
var2=1234
echo"The value of var2 is $var2"
echo $HOME
echo $PATH
echo $PWD
运行后结果:
网友评论