快捷搜索:
来自 67677新澳门手机版 2019-10-06 20:58 的文章
当前位置: 67677新澳门手机版 > 67677新澳门手机版 > 正文

基本操作小结,Shell脚本语言

1.echoif else fi命令

#!/bin/bash
echo hello;echo there
filename=demo.sh
if [ -e "$filename" ]; then 
    echo "$filename already exists!";cp $filename $filename.bak
else
    echo "$filename does not exist!";
fi;
echo "File test complete!"

运行结果(demo.sh一纸空文):

hello
there
demo.sh does not exist!
File test complete!

内需在乎的是filename=demo.sh等号两侧是无法有空格的;if [ -e "$filename" ]中[]左右两边都以有空格的。

   从事机顶盒开发以来,看到很多的Shell脚本,比如:开机启动脚本、系统升级脚本、软探针脚本、和系统编译脚本。这些脚本都是用shell语言开发,虽然在平时的需求开发和维护中会涉及到一定的脚本修改,但是一直没有系统的学习过shell语言。

2.shell基本操作

由此本篇作品首即使记录学习shell进度中的笔记。同时也为加强markdown语法,本篇笔记都以用markdown记录。

2.1 变量大于,等于,小于

#!/bin/bash
a=1
if [ $a -gt 0 ]; then
    echo "greater than zero!"
else
    echo "no more than zero!"
fi
if [[ $a -lt 0 ]]; then
    echo "less than zero!"
else
    echo "no less than zero!"
fi
if [[ a -eq 1 ]]; then
    echo "equal to 1!"
else
    echo "not equal to 1!"
fi

-gt代表大于;-lt代表小于;-eq代表非常。运转结果为:

greater than zero!
no less than zero!
equal to 1!

shell脚本语言

2.2 三目运算符(?:)

# ? is 3 operator
b=10
((t=b<20?6:4)) # t = 6
echo "t=$t"
# variable in () is a part region variable
(b=20;echo "b = $b") # b = 20
echo "b = $b" # b = 10

和C,java等语言类似,shell中的?:也是三目运算符。()意味着三个一无所得部分作用域,能够一时屏蔽全局变量。上式的周转结果为:

t=6
b = 20
b = 10

1、怎么着是shell脚本语言?

脚本语言是像剧本一样教Computer办有个别事情的言语。

脚本语言其实就是短小的、用来让计算机自动化完结一多种专门的学业的次第,那类程序能够用文件编辑器修改

没有须要编写翻译,平常解释运作。

2.3 数组

2、运营shell脚本的五个法子

chmod  x ./XXX.sh    chmod后有空格
./XXX.sh

/bin/sh XXX.sh
2.3.1 数组创设
# () create an array
arr=(1 2 3 5 6)
echo "arr[3] = ${arr[3]}"

输出:

arr[3] = 5

3、shell变量

概念变量时,变量名不加$,如:

your_name="runoob.com"

动用定义过的变量时,只要在变量名前面加上$符号即可,如:

your_name="qinjx"
echo ${your_name}
2.3.2 数老总度
# get the length of array
echo "length of arr is ${#arr[*]}" # 5
echo "length of arr is ${#arr[@]}" # 5

输出:

length of arr is 5
length of arr is 5

只读变量

readonly myUrl
myUrl="www.baidu.com"
2.3.3 输出数组成分
# get all content of array
echo "arr:${arr[*]}" # 1 2 3 5 6
# or
echo "arr:${arr[@]}" # 1 2 3 5 6

输出:

arr:1 2 3 5 6
arr:1 2 3 5 6

剔除变量

unset myUrl
2.3.4 修改数组成分
# assign a new element to an array
arr[1]=100
echo "arr:${arr[@]}" # 1 100 3 5 6
# if assign index if out of bound,then auto create a new element of array
arr[10]=20 # 1 100 3 5 6 20
echo "arr:${arr[@]}"

输出:

arr:1 100 3 5 6
arr:1 100 3 5 6 20

在意假若赋值索引高出数CEO度,也正是是给数组末尾扩展贰个新因素。

变量类型

1、一些变量 :局地变量在剧本或指令中定义,仅在当下shell实例中卓有成效,其余shell运维程序不可能访问变量

2、情状变量 :全体的主次,满含shell运维的主次,都能访谈情形变量,某个程序要求情形变量来担保其健康运转。须要的时候shell脚本也足以定义情况变量

3、shell变量 :shell变量是由shell程序设置的特种变量,shell变量中有一部风是际遇变量,有一对是有个别变量,那么些变量有限支撑了shell的正规运作

2.3.5 删除数组元素
# delete the element of array
unset arr[1] # delete the arr[1],1 3 5 6 20
echo "arr:${arr[*]}" # 1 3 5 6 20
# clear the whole array
unset arr 
echo "${#arr[@]}" # length 0

输出:

arr:1 3 5 6 20
0

unset 假设跟上数组的目录,是剔除该职位的数组成分;如若直白跟数组名,相当于是清空数组。

4、shell字符串

字符串能够运用单引号也能够运用双引号,也得以不应用引号

刚强建议使用双引号

2.3.6 数组切丝
arr=(1 2 4 10)
# slice of array
# ${array_name[*]:start:length},return is a string
echo "${arr[@]:0:3}" # 1 2 4
# assignment
arr1=(${arr[*]:1:2}) # arr1:2 4
echo "${#arr1[@]}"
echo "arr1:${arr1[@]}"

输出:

1 2 4
2
arr1:2 4

取得字符串长度

string="adcg"
echo ${#string}

67677新澳门手机版 ,多了个#

2.3.7 数组成分替换
# replace
# ${array_name[@]/origin_element/new_element}
# this operation doesn't change the origin array
# and will return a string that seperated by space
echo "${arr1[*]/2/20}" # 20 4,arr1:2 4
arr1=(${arr1[*]/4/40}) # arr1:2 40
echo "${arr1[*]}" # 2 40

输出:

20 4
2 40

领取字符串

string="runoob is a great site"
scho ${string 1:4} 输出uoo ,从0开始算

2.4 文件操作

# file operation
if [ ! -w 't.txt' ]; then
    touch t.txt
fi
echo 'test text' > t.txt 
cp t.{txt,back} # cp t.txt to t.back
filename="/home/lyrichu/login"
if [ -r $filename ] # if file is readable
    then 
    echo "$filename is readable!"
else
    echo "$filename is not readable!"
fi

if [ -e $filename ]
    then
    echo "$filename exists!"
else
    echo "$filename doesn't exist!"
fi 

输出:

/home/lyrichu/login is not readable!
/home/lyrichu/login doesn't exist!

地点的代码首先检查t.txt文本是还是不是可写,就算不行写,则再次创建三个文本;然后向t.txt文件写入字符串'test text';接着复制t.txt文件到t.back文件;
接下来剖断/home/lyrichu/login文件是或不是可读以及是还是不是留存。

5、shell数组

shell只援救一维数组

2.5 {}创设八个代码块

# {} create a code block
a=10;echo "a=$a"
{ a=20; } # a = 20
echo "a=$a" # a = 20

输出:

a=10
a=20

概念数组

用括号来代表数组,数组成分用“空格”符号分割开来,定义数组的貌似格局为:

array_name=(value0 value1 value2 value3)

2.6 expr 总括表明式的值

val=`expr $a   $b` # a = 20,b = 10
echo "a   b = $val" # a   b = 30

val=`expr $a * $b` # * means multiply,a*b = 10*20 = 200
echo "a*b=$val"

# divide
val=`expr $a / $b` # 20/10 = 2
echo "a / b = $val"

# mod
val=`expr $a % 9` # 20 % 9 = 2
echo "$a % 9 = $val" # 20 % 9 = 2

输出:

a   b = 30
a*b=200
a / b = 2
20 % 9 = 2

expr能够测算shell表明式的值,上式分别计算了 ,*,/,%运算,注意乘法须求使用*转义。

读取数组

valuen=${array_name[1]}

应用@符号能够获得数组中的全体因素,譬喻:

echo ${array_name[@]}

猎取数组成分的个数

length=${#array_name[@]

获得数组单个成分的长度

length=${#array_name[1]}

2.7 逻辑运算符

if [ $a == $b ]
then echo "a == b!"
fi
if [ $a != $b ] 
    then 
    echo "a != b" 
fi 

# && logit and
if [[ $a -gt 10 && $b -lt 20 ]]
    then
    echo "$a > 10 and $b < 20!"
else
    echo "bad condition!"
fi
# || logit or 
if [[ $a -gt 15 || $b -gt 15 ]]
    then
    echo "a > 15 or b > 15"
else
    echo "a<=15 and b<=15"
fi 

输出:

a != b
20 > 10 and 10 < 20!
a > 15 or b > 15

== 用于比较数字也正是;!=用以相比数字不等。&&代表shell中的逻辑与;||表示shell中的逻辑或运算。

6、shell传递参数

本子内得到参数的格式为:$n,n代表二个数字,$0代表文件名,、$1代表参数1,$2代表参数2。

出口不设有的参数时结果为空

  • $# 传递到剧本的参数个数

  • $* 以三个单词符串突显全数脚本传递的参数

  • $$ 脚本运转的此时此刻进度号

本文由67677新澳门手机版发布于67677新澳门手机版,转载请注明出处:基本操作小结,Shell脚本语言

关键词: