shell 学习记录

简介: shell 学习记录

1.创建脚本 执行报错


-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory

解决方法

由于脚本是在Windows环境下创建的,放在Linux环境下会存在格式的问题,需要转换一下格式 使用 dos2unix 命令转换格式后执行即可


2.实例


#!/bin/bash
echo aaa
readonly myname="wwwww"  #定义变量
echo ${myname}
unset myname    #删除变量 不能删除readonly修饰的变量
echo ${myname}

3.字符串


单引号

str='this is a string'

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号

实例

your_name="runoob"

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

echo -e $str

输出结果为:

Hello, I know you are "runoob"!

双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

获取字符串长度

echo ${#name}

提取子字符串

以下实例从字符串第 2 个字符开始截取 4 个字符:

实例

string="runoob is a great site"

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

Shell 数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。

类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。

定义数组

在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:

数组名=(值1 2 ... n)

例如:

array_name=(value0 value1 value2 value3)

读取数组

读取数组元素值的一般格式是:

${数组名[下标]}

例如:

valuen=${array_name[n]}

使用 @ 符号可以获取数组中的所有元素,例如:

echo ${array_name[@]}

获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

实例

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

注释

单行注释使用 #

多行注释使用 :<< EOF

           EOF


shell参数传递


我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$nn 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推

$0 为脚本的文件名

参数处理 说明
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

 

$* 与 $@ 区别:

  • 相同点:都是引用所有参数。
  • 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。


Shell 基本运算符


Shell 和其他编程语言一样,支持多种运算符,包括:

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

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

例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):

实例

#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为 : $val"

执行脚本,输出结果如下所示:

两数之和为 : 4

两点注意:

  • 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
  • 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
  • 乘号(*)前边必须加反斜杠(\)才能实现乘法运算;


val=`expr 2 + 2`
echo $val
val=`expr 2 - 2`
echo $val
val=`expr 2 \* 2`
echo $val
val=`expr 2 / 2`
echo $val











read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量

  • echo 命令
  •   

echo -e "OK! \c" # -e 开启转义 \c 不换行


显示结果定向至文件

echo "It is a test" > myfile

  •  

判断语句

a=10
b=20
if (( $a == $b ))
then
   echo "a 等于 b"
elif (( $a > $b ))
then
   echo "a 大于 b"
elif (( $a < $b ))
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi

循环语句

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done
while condition
do
    command
done
until 循环
until 循环执行一系列命令直至条件为 true 时停止。
until 循环与 while 循环在处理方式上刚好相反。
一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。
until 语法格式:
until condition
do
    command
done



目录
相关文章
|
6月前
|
关系型数据库 MySQL Shell
shell学习(十七) 【mysql脚本备份】
shell学习(十七) 【mysql脚本备份】
50 0
|
1月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
65 12
|
6月前
|
Linux Shell 文件存储
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(深入df和dh的区别和探索)
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(深入df和dh的区别和探索)
187 1
|
4月前
|
Shell Linux
Shell 脚本编程学习
Shell 脚本编程学习
36 0
|
5月前
|
人工智能 运维 中间件
Linux-shell简单学习
Linux-shell简单学习
30 0
|
6月前
|
运维 Shell Python
Shell和Python学习教程总结
Shell和Python学习教程总结
|
6月前
|
Shell
shell学习(六) 【case多条件分支语句】
shell学习(六) 【case多条件分支语句】
95 1
|
6月前
|
Shell 应用服务中间件 nginx
shell学习(七) 【shell 函数】
shell学习(七) 【shell 函数】
42 1
|
6月前
|
Shell Perl
shell学习(十) 【shell awk基本语法】
shell学习(十) 【shell awk基本语法】
33 1
|
6月前
|
机器学习/深度学习 Shell Windows
shell学习(八) 【shell 正则 匹配符和限定符】
shell学习(八) 【shell 正则 匹配符和限定符】
43 1