Linux shell 基础

  

目录

一、shell脚本的基本使用

1、语言规范

2、变量

3、重定向(>,>>)

二、运算符和常用判断

1、比较运算符

2、逻辑运算符

3、常用判断

三、程序结构

1、分支(if语句)

2、循环

四、函数

shell的本质是一段应用程序,它使得用户和操作系统之间可以交互,是用户和操作系统的中介。

一、shell脚本的基本使用

1、语言规范

(1)文件以.sh结尾;

(2)文件头为:#!/bin/bash (表示使用的是bash shell);

(3)以#开头为注释;

(4)输出: echo "输出内容";

(5)读取:read -p "自定义读取提示" name   (name为读取内容设置的变量名,也可设置多个变量名,以空格分隔,在读取内容时也会以空格分隔内容并分配到相应的变量名)

2、变量

(1)变量的创建级赋值

变量名=变量值

变量名不用声明类型,由字母、数字和下划线组成,但不能以数字开头;默认的大写变量名表示系统变量,小写表示普通变量;

变量值可以为字符、数字和命令,当变量值为命令时需用反单引号(即esc下边的键)包围起来;

例:w=1`ls -l`

(2)变量值的输出($)

需在变量前加上$符号,当使用echo加单引号时输出的只是纯文本,而不会将变量的值提取出来,想要得到变量的值,只能使用双引号将变量包围;

显示所有用户自定的变量用命令:set

显示所有的系统变量用命令:env

(3)从程序外部给程序传递参数

可在程序内部加上$1,表示从外部传进程序的第一个参数;同理$2表示第二个参数,外部的多个参数之间以空格分隔。

例:给程序a.sh传入ab,22两个参数,使用命令:a.sh ab 22

$0表示程序自身,$#表示所有输入参数的个数,$@表示所有的参数。

如果不是很明了可参考python中的sys.argv,机理基本一样 http://www.cnblogs.com/aland-1415/p/6613449.html

3、重定向(>,>>)

即通过命令将结果输入到文件中

例:ls -l >name.txt

如果文件不存在将会创建文件,如果文件存在,使用“>”时将会对文件进行覆盖重写,使用“>>”将会在文件的末尾进行追加写入。

也可以在>或>>前加上1或2,注意不要与>,>>之间有空格,其中1表示正确的命令,2表示错误的命令。

二、运算符和常用判断

1、比较运算符

等于:==

不等于:!=

大于:>或-gt

小于:<或-lt

大于等于:>=或-ge

小于等于:<=或-le

在使用(( ))中的条件中只能使用>等符号而不能使用-gt,在shell中(( ))和[]在一定程度上是等价的。

2、逻辑运算符

逻辑与:-a

逻辑或:-o

逻辑非:!

3、常用判断

-r 文件名:文件是否存在且可读

-w 文件名:文件是否存在且可写

-x 文件名:文件是否存在且可执行

-f 文件名:判断文件是否存在且是普通文件

-d 文件名:文件是否存在且是目录

-e 文件名:文件是否存在

-z 变量:判断字符串长度是否等于0

-n 变量:字符串长度是否不等于0

在需加[]的条件判断中,如果在-r等前边加上test则不用加[];

三、程序结构

1、分支(if语句)

(1)基本格式:

if [ 条件 ]

then

语句1

else

语句2

fi

注意:每个[ ] 左右两端都需要有空格,条件语句中如果包含变量则需要用双引号包围。

then也可以写在条件之后,不过要在条件之后加上分号。

(2)多个条件连接格式:

if [ condition1 ] ;then

sentence1

elif [ condition2 ] ;then

sentence2

elif [ condition3 ] ;then

sentence3

else

sentence4

fi

(3)case选择

使用格式:

case $变量名 in

"值1")

语句1;;

"值2")

语句2;;

...

*)

语句n

esac

其中;;表示语句结束,*)表示上边所有结果都不符合的最后选择;

值也可以用区间,但最多只能用0-9的数字。

2、循环

(1)while循环

格式

while [ 条件 ]

do

语句

done

常用循环变量变化写法:

((i++))

((i+=1)

let i=i+1

i=$(($i+1))

i=$ [ $i+1 ]

常用运算迭代写法:

((sum=$sum+$i))

sum=$[$sum+$i]

sum=$(($sum+$i))

(2)for 循环

for 迭代子

do

语句

done

for循环常用迭代子的写法:

((i=1;i<=10;i++))

i in 1 2 3 4 5 6

i in `seq 1  2  15`  #1和15表示起始点,2表示步长

四、函数

函数构造

函数名(){

内容

}

函数调用直接用函数名即可。

原文地址:https://www.cnblogs.com/aland-1415/p/6670781.html