龙空技术网

Linux的shell脚本编程详细总结

数字化与智能化 1644

前言:

现在同学们对“linux 全局变量”可能比较关怀,同学们都需要学习一些“linux 全局变量”的相关文章。那么小编也在网摘上汇集了一些对于“linux 全局变量””的相关文章,希望大家能喜欢,各位老铁们快快来了解一下吧!

《大数据和人工智能交流》头条号向广大初学者新增C 、Java 、Python 、Scala、javascript 等目前流行的计算机、大数据编程语言,希望大家以后关注本头条号更多的内容。

Linux的shell脚本编程

一、最简单的shell

1、Shell的结构:

(1)、#!指定执行脚本的shell

(2)、#注释行

(3)、控制结构

2、创建shell的步骤:

(1)、使用vi编辑器创建以.sh结尾的文件 :vi demo.sh

(2)、编辑相关shell程序,编写完毕后加执行权限:

chmod u+x demo.sh

(3)、执行程序 ./demo.sh

也可以使用sh demo.sh来执行

使用 sh -x demo.sh中的x表示脚本的执行过程

使用 sh -n demo.sh不执行脚本,只是检查语法的错误,返回所有错误信息

二、shell的变量

Shell变量包括:临时变量和环境变量,临时变量时shell程序内部定义的,对其他程序不可见,包括用户自定义变量和位置变量;环境变量就是全局变量,不随着shell脚本的结束而消失

在使用变量值的时候,要在变量名前加前缀"$"

变量赋值用"=",注意两边不能有空格

变量赋值举例:

1、 NUM=1

2、将一个命令的执行结果赋给变量,例如

time=`date`

time=(date +%F) echo $time

3、将一个变量赋给另一个变量:A=$B

查看变量的值:echo $A

字符串用单引号或者双引号

双引号有自动解析变量的功能

例如:

sum=100

echo "The total is $sum"

set为显示所有的环境变量

删除变量unset

三、位置变量和特殊变量

1、位置变量

Shell解释执行用户命令的时候,将命令行的第一部分作为命令名,其他部分作为参数。有出现在命令行上的位置确定的参数成为位置参数

例如:ls -l file1 file2 file3

$0位置被个程序的文件名占用,其它剩余位置$1 $2 $3…$9

例如:在test.sh中有如下内容

mkdir files$1_s00$2_class$3

执行时候./test.sh 001 1 001,表示$0被test.sh占用、$1被001占用、1被$2占用,001被$3占用

2、特殊变量

$*这个程序的所有参数

$#这个程序的参数个数

$$这个程序的 PID

$!执行上一个后台的PID

$?执行上一个命令的返回值

例如有test.sh程序,内容如下:

echo '$# is:' $#

echo '$* is:' $*

echo '$? is:' $?

echo '$$ is:' $$

echo '$0 is:' $0

运行 ./test.sh p1 p2 p3 后查看结果

四、shell的命令

1、Read命令:从键盘读入数据,赋给变量

例如 read x 100 ; echo $x

如程序test.sh:

read a1 a2 a3

echo "the a1 value is $a1"

echo "the a2 value is $a2"

echo "the a3 value is $a3"

则执行的时候

./test.sh 100 200 300

2、expr指令:对整型变量进行算术运算

例如expr 100 + 200注意加号左右有空格

del@box:/temp$ expr 100 + 200

300

另外注意乘法为" \*",要有转义符

例如3 \* 5

复杂的运算:expr `expr 6 + 9` / 3

将运算的结果赋予变量 x=`expr 1 + 2`

3、变量测试语句:

测试变量是否相等、为空等情况。语法:test 测试条件;测试范围:整数、字符串、文件

(1)字符串测试:

test str1=str2 测试字符串是否相等

test str1!=str2 测试字符串是否不相等

test str1 测试字符串是否不为空

test -n str1 测试字符串是否不为空

test -z str1 测试字符串是否为空

(2)测试整数

test int1 -eq int2 测试int1和int2是否相等

test int1 -ge int2 测试int1是否>=int2

test int1 -gt int2 测试int1是否>int2

test int1 -le int2 测试int1是否<=int2

test int1 -lt int2 测试int1是否<int2

test int1 -ne int2 测试int1和int2是否不相等

(3)文件测试

test -d file 指定文件是否目录

test -f file 指定文件是否常规文件

test -x file 指定文件是否可执行

test -r file 指定文件是否可读

test -w file 指定文件是否可写

test -a file 指定文件是否存在

test -s file 文件大小是否非0

测试语句一般不单独使用,一般配合if语句来判断,如:

if test -d $1 then

…….

fi

变量测试语句也可以用[]简化,例如:

test -d $1等价于 [ -d $1 ] 注意:中括号左右的表达式要有空格

五、流程控制

1、选择结构if语句

(1) If [ ]; then

fi

(2) If [ ]; then

else

fi

例如:

If [ $# -ne 2 ]; then

echo "not enough parameters"

exit 0 //0表示正常退出

fi

If[ $1 -eq $2 ];then

echo "$1 equals $2"

fi

(3) If [ ] then

elif [ ]

elif [ ]

else

例如:test.sh内容如下

read file_name

if [ -d $file_name ]

then

echo "This is directory!!!"

elif [ -f $file_name ]

then

echo "This is file!!!"

else

echo "This is nothing!!!"

fi

条件组合查询:

-a :逻辑与,条件都成立的时候结果为真

-o :逻辑或,只要有一个条件成立,结果为真

例如:test.sh内容如下

read file_name

if [ -d $file_name ]

then

echo "This is directory!!!"

elif [ -f $file_name ]

then

echo "This is file!!!"

elif [ -c $file_name -o -b $file_name ]

echo "This is device file!!!"

else

echo "This is nothing!!!"

fi

2、for循环

语法:

for 变量 in 名字表

do

…..

done

例如:

for x in 11 22 33 44 55 66

do

echo "x value is : $x"

done

3、case语句

语法:

case "$variable" in

"$condition1" )

command...

;;

"$condition2" )

command...

;;

esac

对变量使用""并不是强制的, 因为不会发生单词分割

每句测试行, 都以右小括号)来结尾

每个条件判断语句块都以一对分号结尾 ;;

case块以esac (case的反向拼写)结尾

例如,有下列程序test.sh内容如下:

read c

case $c in

a)

echo "this is a"

;;

b)

echo "this is b"

;;

c)

echo "this is c"

;;

*)

echo "none"

esac

4、while循环

基本语法:

while [ condition ]

do

command1

command2

command3

done

例如,test.sh中的写法如下:

num=1

while [ $num -le 10 ]

do

sum=`expr $num \* $num`

echo $sum

num=`expr $num+1`

done

5、break和continue语句

break:结束循环

continue:结束本次循环,开始新的一轮循环

例如:

while true

do

echo "============================"

echo " 1 add "

echo "2 delete "

echo "3 update"

echo "4 Quit"

read num_op

case $num_op in

1)

echo "this is add operation"

;;

2)

echo "this is delete operation"

;;

3)

echo "this is update operation"

;;

4)

echo "exit ….."

break

;;

esac

done

6、shift指令

参数左移:每执行一次,参数序列顺次左移一个位置,即$#的值减去1。其用于处理每个参数,移动出去的参数不能再用

例如,test.sh文件内容如下:

If [ $# -le 0 ]

then

echo "not enough parameters"

exit 0

Fi

Sum=0

While [ $# -gt 0 ]

sum=`expr $sum + $1`

shift

Done

Echo $sum

《大数据和人工智能交流》的宗旨

1、将大数据和人工智能的专业数学:概率数理统计、线性代数、决策论、优化论、博弈论等数学模型变得通俗易懂。

2、将大数据和人工智能的专业涉及到的数据结构和算法:分类、聚类 、回归算法、概率等算法变得通俗易懂。

3、最新的高科技动态:数据采集方面的智能传感器技术;医疗大数据智能决策分析;物联网智慧城市等等。

根据初学者需要会有C语言、Java语言、Python语言、Scala函数式等目前主流计算机语言。

根据读者的需要有和人工智能相关的计算机科学与技术、电子技术、芯片技术等基础学科通俗易懂的文章。

标签: #linux 全局变量