系统相关
首页 > 系统相关> > 【Linux】shell编程基本知识

【Linux】shell编程基本知识

作者:互联网

【Linux】shell编程基本知识--lhr

7.2.1 shell环境变量

只读的环境变量

特殊的环境变量值是系统预先定义好的,用户不能重新设置。

$$——当前进程的进程ID(PID)
$?——最后执行的一条命令的退出状态,返回值为0则成功, 非0则失败
$!——在后台运行的最后一个进程的进程ID
$# ——传送给shell程序的位置参数的数量
$0——shell程序的名称 即第一个参数
$*——调用shell程序时所传送的全部参数成的单字符串

7.4 shell编程中的输入输出命令

shell中输⼊输出的标准⽂件
每个进程运⾏时⾃动打开三个⽂件,这些⽂件称为命令的标准⽂件,分别⽤于命令读取输⼊、输出结果以及输出错误消息,即

常用命令

export	NAME=value	//Name成为环境变量

标准变量也是环境变量,在bash环境建⽴时⽣成,该变量⾃动解析,通过查看etc⽬录下的profile⽂件可以查看系统中的标准环境变量;使⽤env命令可以查看系统中的环境变量,包括环境变量和标准变量
实例:

env
set #看已经定义的变量

7.5 shell程序控制结构语句

正则表达式
在这里插入图片描述

变量的运算

Shell中变量没有明确的类型,变量值都以字符串的形式存储。
算术运算需要使⽤命令将变量中的字符串转换为数值。Shell中的运算⼀般通过两个命令实现:letexpr
let命令可以进⾏算术运算和数值表达式测试,let命令的使⽤格式如下:

i=1; echo “i=$((i+3))”
expr  数学表达式	//expr 3+5

7.5 shell程序控制结构语句

脚本的控制结构语句有三种基本的类型:

7.5.1 测试语句

测试语句是shell的特有功能,和各种条件语句来结合使用。
在shell中使用测试语句来计算判断条件的值。测试语句计算一个表达式的值并返回“真”或“假”。
格式:

test expression 例如: test –f "$1"
[ expression ] 例如: [ -f "$1" ]

测试类型:

文件测试

在这里插入图片描述

字符串测试

在这里插入图片描述
例如:

[ "$s1" = "$s2" ]
test "$s1" = "$s2"

数值测试

在这里插入图片描述
例如:

[ "$s1" -gt 10 ]
test "$s1" -gt 10
[ \( "$a" –gt 0 –a "$a" –lt 10 \) –a "$a" –ne 5 ] 
test \( "$a" –gt 0 –a "$a" –lt 10 \) –a "$a" –ne 5

7.5.2 if语句

两路分支的if语句格式:

if 判断条件
then 命令1
else 命令2
fi

判断条件包括命令语句和测试语句两种方式:
命令语句形式的判断条件

【例7.7】编写一个shell脚本,查找给定的某用户是否在系统中工

作。如果在系统中就发一个问候给他。

#!bin/sh
echo "type in the user name"
read user
if who|grep $user
then echo "hello! $user!"|write $user
else echo "$user has not logged in the system"
fi

测试语句形式的判断条件:

【例7.8】编写一个shell脚本,利用位置参数携带一个文件名,

判断该文件在当前目录下是否存在且是一个普通文件。

#!bin/sh
if test -f "$1"
then echo "$1 is an ordinary file"
else echo "$1 is not an ordinary file"
fi
if 判断条件1
then 命令1
elif 判断条件2
then 命令2
……
else 命令n
fi

其中elif是else if的缩写

【例7.9】编写一个shell脚本,输入(1-10)之间的一个数,并判断它是否小于5。

echo 'key in a number (1 - 10 ) :'
read a
if [ "$a" -lt 1 –o "$a" -gt 10 ]
then echo " Error Number . "
exit
elif [ ! "$a" –lt 5 ]
then echo " It's not less 5 . "
else echo " It's less 5 . "
fi

7.5.3 case语句

对同一变量进行多次的测试,比elif语句更简单、简洁

case string1 in
str1)
	commands-list1;;
str2) 
	commands-list2;;
...
strn)
	commands-listn;;
esac

含义:将stringl和strl…strn比较。如果strl和strn中的任何一个和string1相符合,则执行其后的命令一直到两个分号(;;)结束。如果没有符合的,则其后的语句不被执行。

使用case语句时应注意以下几点:

case语句特点:

  1. 各正则表达式是唯一的,不应重复出现。
  2. case语句以关键字case开头,以关键字esac结束。
  3. case的退出(返回)值是整个结构中最后执行的那个命
    令的退出值。若没有执行任何命令,则退出值为零。

【例7.11】case语句的通配符及多个模式组合实例。

case $1 in
[dD]ate) echo "the date is `date`";;
dir|path) echo "current directory is `pwd`";;
*) echo "bad argument";;
esac

7.5.4 for语句

格式:

for variable [in argument-list]
do
	command-list
done

其中的[in argument-list]部分为可选项,由于它的不同又可有三种形式:
1、[argument-list]为变量值表
变量variable依次取值表中各字符串

【例7.12】将指定的值用for循环依次输出。

for a in 1 2 3 4 5
do
	echo "$a“
done

2、[argument-list]为文件的表达式
变量的值依次取当前目录(或指定目录)下与文件表达式相匹配的文件名,每取值一次,就进入循环体执行命令表,直到所有匹配的文件名取完为止。

【例7.13】将当前目录下的所有*.c文件信息用for循环依次输出。

for i in *.c 
do 
	ls $i
done

3、[argument-list]为空
实际是用$*来代替,变量依次取位置参数的值,然后执行循环体中的命令表,直至所有位置参数取完为止。

【例7.14】编写shell脚本,第一个位置参数为指定的目录,其后指定的位置参数为第一个位置参数指定目录下的文件,显示这些文件的内容。

dir=$1;shift
if [ -d $dir ]
then cd $dir
	for name #依次取位置参数的值
	do
		if [ -f $name ]
		then cat $name
			echo "End of ${dir}/$name"
		else echo "Invalid file name : ${dir}/$name"
		fi
	done
else echo "Bad directory name:$dir"
fi

7.5.5 while语句

格式为:

while expression
do
	command-list
done

作用:只要expression的值为真,则进入循环体,执行command- list中的命令,然后再做条件测试,直到测试条件为假时才终止while语句的行。

【例7.15】编写程序,这段程序对各个给定的位置参数,首先判断其 是否是普通文件,若是,则显示其内容;否则,显示它不是文件名的信息。

while [ $1 ]
do
	if [ -f $1 ]
	then echo " display : $1 "
		cat $1
	else echo " $1 is not a file name . "
	fi
	shift
done

【例7.16】利用while循环输出0到10之间的整数。

x=1
while [ $x -le 10 ]
do 
	echo $x
	x=`expr $x + 1`
done

7.5.7 break和continue语句

break命令可以从循环体中退出来。格式为:

break [n]

continue命令跳过循环体中在它之后的语句,回到本层循环的开头,进行下一次循环。格式为:

continue [n]

【例7.18】用while和break输出1-10之间的整数

x=1
while true
do
	echo $x
	x=`expr $x + 1`
	if [ "$x" -gt 10 ]
	then break
	fi
done

【例7.19】输入一组数,输出除了值为3的所有数。

for i in 1 2 3 4 5
do
	if [ " $i" –eq 3 ]
	then continue
	else echo " $i "
	fi
done

7.5.8 算术表达式和退出脚本程序命令

五种基本的算术运算:+(加)、-(减)、*(乘)、/(除)和%(取模)。shell只提供整数的运算。格式如下:

expr n1 运算符 n2
expr 15 \* 15

注意:在运算符的前后都留有空格,否则expr不对表达式进行计算,而直接输出它们。
退出脚本程序命令:

exit [n]

其中n为设定的退出值,如果未给定n的值,则退出值为最后一个命令的执行状态。

7.5.9 自定义函数

在shell脚本中可以定义并使用函数。其定义格式为:

function( )
{ 
	command-list
}

函数应先定义,后使用。调用函数时,直接利用函数名调用。

Linux可执行文件种类

Shell对命令解析过程

在这里插入图片描述

标签:语句,10,shell,基本知识,echo,命令,Linux,7.5
来源: https://blog.csdn.net/dive668/article/details/119059762