专业编程基础技术教程

网站首页 > 基础教程 正文

shell 语法基础

ccvgpt 2024-08-18 14:42:31 基础教程 27 ℃

Shell变量

1、Shell变量的定义、删除变量、只读变量、变量类型

shell 语法基础

定义变量

Shell 支持以下三种定义变量的方式:

variable=value variable='value’ variable="value”

Shell 变量的命名规范和大部分编程语言都一样:

变量名由数字、字母、下划线组成;

必须以字母或者下划线开头;

不能使用 Shell 里的关键字(通过 help 命令可以查看保留关键字)。

修改变量的值

url="http://c.biancheng.net"

echo ${url}

url="http://c.biancheng.net/cpp/shell/"

echo ${url}


2、将命令的结果赋值给变量

Shell 也支持将命令的执行结果赋值给变量,常见的有以下两种方式:

variable=`command` variable=$(command)

只读变量

myUrl="https://mp.toutiao.com/"

readonly myUrl

myUrl=https://mp.toutiao.com/

删除变量

myUrl="https://mp.toutiao.com/"

unset myUrl

echo $myUrl


3、运行shell时,会同时存在三种变量:

1) 局部变量

局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部 变量。

2) 环境变量

所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常 运行。必要的时候shell脚本也可以定义环境变量。

3) shell变量

shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变 量,这些变量保证了shell的正常运行


4、Shell特殊变量:Shell $0, $#, $*, $@, $?, $和命令行参数

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。




5、算术运算符

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

val=`expr 2 + 2`

echo "Total value : $val“



6、关系运算符

a=10 b=20

if [ $a -eq $b ]

then

echo "$a -eq $b : a is equal to b"

else

echo "$a -eq $b: a is not equal to b"

Fi



7、布尔运算符

a=10 b=20

if [ $a != $b ]

then

echo "$a != $b : a is not equal to b"

else

echo "$a != $b: a is equal to b"

Fi



8、字符串运算符

a="abc“ b="efg"

if [ $a = $b ]

then

echo "$a = $b : a is equal to b“

else

echo "$a = $b: a is not equal to b"

fi




9、Shell字符串

单引号

str='this is a string'

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

双引号

your_name='qinjx'

str="Hello, I know your are \"$your_name\"! \n"

双引号里可以有变量

双引号里可以出现转义字符

拼接字符串

your_name="qinjx"

greeting="hello, "$your_name" !"

greeting_1="hello, ${your_name} !"

echo $greeting $greeting_1

获取字符串长度

name="qinjx"

echo ${#name} #输出 4


10、Shell字符串

提取子字符串

string="alibaba is a great company"

echo ${string:1:4} #输出liba

查找子字符串

string="alibaba is a great company"

echo `expr index "$string" is`


11、Shell数组:shell数组的定义、数组长度

定义数组

array_name=(value0 value1 value2 value3)

#或者

array_name[0]=value0

array_name[1]=value1

读取数组

读取数组元素值的一般格式是: ${array_name[index]}

获取数组的长度

# 取得数组元素的个数

length=${#array_name[@]}

# 或者

length=${#array_name[*]}

# 取得数组单个元素的长度

lengthn=${#array_name[n]}


12、Shell if else语句

1) if ... else 语句

a=10 b=20

if [ $a == $b ]

then

echo "a is equal to b"

fi

2) if ... else ... fi 语句

if [ $a == $b ]

then

echo "a is equal to b"

else

echo "a is not equal to b"

fi

3) if ... elif ... fi 语句


13、Shell test命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。


14、Shell case esac语句

case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构。 case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令

case 值 in

模式1)

command

;;

模式2)

command

;;

模式*)

Command

;;

esac


15、Shell for循环

实例:

for loop in 1 2 3 4 5

do

echo "The value is: $loop"

Done

显示主目录下以 .bash 开头的文件:

for FILE in $HOME/.bash*

do

echo $FILE

done


16、Shell while循环

while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件



17、Shell until循环

until 循环执行一系列命令直至条件为 true 时停止。until 循环与 while 循环在处理方式上刚好相反。一般while循环优于until循环,但在某些时候,也只是极少数情况下,until 循环更加有用。



18、Shell break和continue命令

在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,像大多数编程语言一样,Shell也使用 break 和 continue 来跳出循环。

break命令允许跳出所有循环(终止执行后面的所有循环)。

continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。


19、Shell函数:Shell函数返回值、删除函数、在终端调用函数

函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。像其他编程语言一样,Shell 也支持函数。Shell 函数必须先定义后使用。

像删除变量一样,删除函数也可以使用 unset 命令,不过要加上 .f 选项:unset .f function_name

如果你希望直接从终端调用函数,可以将函数定义在主目录下的 .profile 文件,这样每次登录后,在命令提示符后面输入函数名字就可以立即调用。


20、Shell函数参数

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...

注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。



21、Shell文件包含

像其他语言一样,Shell 也可以包含外部脚本,将外部脚本的内容合并到当前脚本。


Tags:

最近发表
标签列表