shell基础知识

编程

Ps:本内容摘自“鸟哥的私房菜”

kernel 是【核心】的意思,而shell 是【壳】的意思。核心是操作系统的最底层的
东西,包括了各种的支持硬件的工具!
echo:在一串指令中,还需要由其它的指令提供的信息,可以使用quote
[`command`]
若该变量需要在其它子程序执行,则需要以export来使变量变成环境变量。
若该变量为扩增变量内容时,则需以双引号及$变量名称 如:["$PATH":/home]继续
累加内容

#! /bin/sh
echo "hello shell!"
第一行的#!是一个约定标记, 它告诉脚本这段脚本需要什么解释器来执行. 

运行shell程序有3种方法:

chmod +x使文件具有可执行权限, 直接运行
直接调用解释器, 将脚本文件作为参数传入 (比如bash hi.sh)
使用source(也可用 . 代替)执行文件
通常情况下, 最方便的方式就是方式1, 通过方式1执行你需要在脚本第一行写好这
段脚本由哪个解释器来解释, 而通过方式2来执行则没有这个限制, 写了也没用.
除此之外方式1与方式2执行命令就没有区别了, 但方式3执行的方式与前两种都不同
:

变量
和其它语言一样Shell中也有变量, 而且更简单, 但有一些比较特殊的地方.

Shell中的变量只有字符串这一种类型
Shell中变量名与变量值没有长度限制
Shell的变量也允许比较操作和整数操作, 只要变量中的字符串为数字
使用source执行shell脚本时, 不会创建子进程, 而是在父进程中直接执行!


关于某个档名的【类型】侦测(存在与否),如 test -e filename
-e 该【档名】是否存在?
-f 该【档名】是否为档案(file)?
-d 该【档名】是否为目录(directory)?
-r,-w,-x 侦测该文件名是否具有【可读】【可写】【可执行】的属性?
-nt (newer than)判断file1 是否比file2新
-ot (older than)判断file1是否比file2旧

判定字符串的数据:
test -z string: 判断字符串是否为0?若string为空字符串,则为true
test -n string: 判断字符串是否非为0?若string为空字符串,则返回false。
test str1 = str2: 判断str1是否等于str2?
test str1 != str2: 判断str1是否不等于str2?

多重条件判断:
-a(and)两状况同时成立!
-o (or)两状况任何一个成立!
! (反相状态)

利用判断符号[]
判断符号进行数据的判断

利用 if ... then
if [条件判断式]; then
       当条件判读式成立时,可以进行的指令工作内容;
fi
多条件的情况:可以使用&& 或||来隔开括号与括号之间。他们的意义是:
&& 代表 AND; || 代表 OR
if [条件判断式一]; then
       当条件判断式一成立时,可以进行的指令工作内容;
elif [条件判断式二]; then
       当条件判断式二成立时,可以进行的指令工作内容;
else
       当条件判断式一与二均不成立时,可以进行的指令工作内容;

fi

既定变量内容:
针对既定变量内容使用case in esac。
case $变量名称 in
  "第一个变量内容")
        程序段
    ;;

  "第二个变量内容")
        程序段
    ;;
*)
     不包含第一个变量内容与第二个变量内容的其它程序执行段
      exit 1
        ;;
esac

一般来说,使用[case $变量 in]这个语法中,当中的那个$变量大致有两种取得的
方式:
* 直接下达方式:例如[script.sh variable]的方式来直接给予$1变量内容
* 交互式:透过read 这个指令来让使用者输入变量的内容。

利用function功能:
函数可以在shell script当中做出一个类似自订执行指令的东西。
function的语法是这样:
function fname(){
    程序段
}
fname 就是我们的自订的执行指令名称~而程序段就是我们要他执行的内容了
要注意的是,在
shell script 当中, function 的设定一定要在程序的最前面, 这样才能够在执
行时被找到可用的程序段喔!

循环(loop)
循环可以不断的执行某个程序段落,直到使用者设定的条件达成为止。
while do done, until do done
一般来说,循环最常见的就是底下这两种状态:
while [condition]
do
    程序段落
done
while是[当... 时]即【当condition条件成立时,就进行循环,直到condition的
条件不成立才停止】

until [condition]
do
    程序段落
done
这种方式与while相反,它说的是[当condition条件成立时,就终止循环,否则就持
续进行循环的程序段。]

for ... do ... done
相对于while,until的循环方式是必须要[符合某个条件]的状态,for这种语法,则
是[已经知道要进行几次循环]的状态!
for((初始值;限制值;执行步阶))
do
    程序段
done

初始值:某个变量在循环当中的起始值,直接以类似i=1设定好;
限制值;当变量的值在这个限制值的范围内,就继续进行循环。
执行步阶:每次循环,变量的变化量。

非数字方面的循环:
for var in con1 con2 con3 ... 
do
    程序段
done
第一次循环时,$var 的内容为 con1;
第二次循环时,$var 的内容为 con2;
第三次循环时,$var 的内容为 con3;

shell script 的追踪与debug
sh [-nvx] scripts.sh
参数:
-n : 不要执行script,仅查询语法的问题;
-v : 在执行script前,先将scripts的内容输出到屏幕上;
-x : 将使用到的scirpt内容显示到屏幕上。

PS:netstat 可以查询目前主机有开启的网络服务端口(service ports)
netstat -tuln 来获取目前主机有启动的服务。
常见的port与相关网络服务的关系是:
80:WWW
22:ssh
21:FTP
25:mail
 

以上是 shell基础知识 的全部内容, 来源链接: utcz.com/z/510610.html

回到顶部