Shell脚本入门及增强篇

Shell 是一个用 C 语言编写的程序, 通过 Shell 用户可以访问操作系统内核服务。它类似于 DOS 下的 command 和后来的 cmd.exe。Shell 既是一种命令语言,又是一种程序设计语言。
Shell script 是一种为 shell 编写的脚本程序。 Shell 编程一般指 shell
脚本编程,不是指开发 shell 自身。
Shell 编程跟 java、 php 编程一样,只要有一个能编写代码的文本编辑器
和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多, 一个系统可以存在多个 shell

可以通过

cat /etc/shells

命令查看系统中安装的 shell!
Bash 由于易用和免费,在日常工作中被广泛使用。同时, Bash 也是大多数
Linux 系统默认的 Shell

1.基本格式

扩展名不重要!
使用 vi 编辑器新建一个文件 hello.sh。 扩展名并不影响脚本执行,见名知
意。 比如用 php 写 shell 脚本,扩展名就用 .php。

#!/bin/bash
echo "Hello World !"

**#!**是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用
哪一种 Shell。
echo 命令用于向窗口输出文本。
Shell 脚本的执行:
chmod +x ./hello.sh #使脚本具有执行权限

./hello.sh #执行脚本

直接写 hello.sh, linux系统会去PATH里寻找有没有叫 hello.sh的。 用 ./hello.sh 告诉系统说,就在当前目录找。

还可以作为解释器参数运行。 直接运行解释器,其参数就是 shell 脚本的文件名,如:
/bin/sh /bin/sh /opt/webapps/hello.sh

/bin/php test.php

这种方式运行脚本,不需要在第一行指定解释器信息,写了也不生效!

可以通过 cat /etc/shells 命令查看系统中安装的 shell。

2.shell变量

2.1语法格式:

变量=值,如: your_name=“xu.cn”
注意:变量名和等号之间不能有空格,同时,变量名的命名须遵循如下规则:
首个字符必须为字母( a-z, A-Z)
中间不能有空格,可以使用下划线( _)
不能使用标点符号
不能使用 bash 里的关键字(可用 help 命令查看保留关键字)

2.2变量使用:

使用一个定义过的变量,只要在变量名前面加 $ 即可。

your_name="xu.cn"
echo $your_name
echo ${your_name}

花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
使用 unset 命令可以删除变量。 不能删除只读变量。

readonly your_name
unset your_name

2.3变量类型:

1) 局部变量 :

局部变量在脚本或命令中定义,仅在当前 shell 实例中有效,其
他 shell 启动的程序不能访问局部变量。
2)环境变量 :
所有的程序,包括 shell 启动的程序,都能访问环境变量,有些程
序需要环境变量来保证其正常运行。
可以用过 set 命令查看当前环境变量

2)shell变量 :

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

3) 参数传递:

在执行 Shell 脚本时, 可以向脚本传递参数。
脚本内获取参数的格式为: $n。 n 代表一个数字, 1 为执行脚本的第一个参
数, 2 为执行脚本的第二个参数,以此类推…… $0 表示当前脚本名称。

4)特殊字符:

$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。
$$ 脚本运行的当前进程 ID 号
$! 后台运行的最后一个进程的 ID 号
@ 与 @ 与 @*相同,但是使用时加引号,并在引号中返回每个参数。
$? 显示最后命令的退出状态。 0 表示没有错误,其他任何值表明有错误。

例子:

#!/bin/bash
echo "第一个参数为: $1";
echo "参数个数为: $#";
echo "传递的参数作为一个字符串显示: $*";

执行脚本: ./test.sh 1 2 3

∗ 和 *和 @区别:
相同点: 都表示传递给脚本的所有参数。
不同点:
不被" “包含时, ∗ 和 *和 @都以$1 $2… n 的 形 式 组 成 参 数 列 表 。 被 " " 包 含 时 , " n 的形式组成参数列表。 被" "包含时, " n"""*” 会将所有的参数作为一个整体,以"$1 $2 … n " 的 形 式 组 成 一 个 整 串 ; " n" 的形式组成一个整串; " n""@" 会将各个参数分开,以"$1" “ 2 " … " 2" … " 2""n” 的
形式组成一个参数列表。

5)Shell 运算符

Shell 和其他编程语音一样,支持包括:算术、关系、 布尔、字符串等运
算符。 原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如
expr。 expr 是一款表达式计算工具,使用它能完成表达式的求值操作。例如加,减,乘,除等操作
注意:表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2。
完整的表达式要被 包含,注意不是单引号,在 Esc 键下边。

例如,以下表示一些数据的运算

#!/bin/bash
echo "hello world"
a=4
b=20
#加法运算
echo `expr $a + $b`
#减法运算
echo `expr $b - $a`
#乘法运算,注意*号前面需要反斜杠
echo `expr $a \* $b`

#除法运算
echo `expr $b / $a`

注意:
此外,还可以通过(())、 $[]进行算术运算。

count=1
((count++))
echo $count
a=$((1+2))
a=$[1+2]

3.流程控制

3.1 if else 语句

if condition1
then
command1
elif condition2
then
command2
else
commandN
fi

条件表达式写法
EQ 就是 EQUAL等于
NQ 就是 NOT EQUAL不等于
GT 就是 GREATER THAN大于 
LT 就是 LESS THAN小于
GE 就是 GREATER THAN OR EQUAL 大于等于
LE 就是 LESS THAN OR EQUAL 小于等于

#!/bin/bash

a=10
b=20

if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
   echo "$a -ne $b: a 不等于 b"
else
   echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
   echo "$a -gt $b: a 大于 b"
else
   echo "$a -gt $b: a 不大于 b"
fi


if [ $a -lt $b ]
then
   echo "$a -lt $b: a 小于 b"
else
   echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
   echo "$a -ge $b: a 大于或等于 b"
else
   echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
   echo "$a -le $b: a 小于或等于 b"
else
   echo "$a -le $b: a 大于 b"
fi

3.2 for循环:

方式一

for N in 1 2 3
do
echo $N
done

for N in 1 2 3; do echo $N; done

for N in {1..3}; do echo $N; done

方式二

for ((i = 0; i <= 5; i++))
do
echo "welcome $i times"
donefor ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done

需求:使用for循环打印数字以及当前系统所有进程

#!/bin/bash
#循环打印 1 2 3这三个数字
for N in 1 2 3
do
 echo $N
done
a=1
b=2
c=3
for N in  $a $b $c
do
 echo $N
done

#打印当前系统所有进程

for N in `ps -ef`
do 
 echo $N
done

3.3 while语法:

方式一

while expression
do
commanddone

方式二:

#!/bin/bash
i=1
while (( i <= 3))
do 
 let i++
 echo $i
done

#echo $i

let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量
计算中不需要加上 $ 来表示变量。 自加操作: let no++ 自减操作: let no—

方式三: 无限循环

while true
do
command
done

3.4 case语句:

case 值 in
模式 1)
command1
command2

commandN
;;
模式 2)
command1
command2

commandN
;;
esac

使用case语句实现交互会话

#!/bin/bash
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

4.函数使用:

4.1 所有函数在使用前必须定义

这意味着必须将函数放在脚本开始部分,直至shell 解释器首次发现它时,才可以使用。 调用函数仅使用其函数名即可。
[ function ] funname [()]
{
action;
[return int;]
}

可以带 function fun()定义,也可以直接 fun() 定义,不带任何参数。

4.2 参数返回

可以显示加 return ,如果不加,将以最后一条命令运行结果,作为返回值。 return 后跟数值 n(0-255)。

4.3 函数参数:

在 Shell 中,调用函数时可以向其传递参数。在函数体内部, 通过 $n 的形
式来获取参数的值,例如, $1 表示第一个参数, 2 表 示 第 二 个 参 数 . . . 注 意 , 当 n > = 10 时 , 需 要 使 用 2 表示第二个参数... 注意, 当 n>=10 时,需要使用 2...n>=10使{n}来获取参数。

funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

定义我们自己的函数并在shell脚本当中调用函数

#!/bin/bash
hello(){
 echo "hello world"
 echo "第一个参数为 $1"
 echo "第二个参数为 $2"
}
hello abc 123

#!/bin/bash

demoFun(){
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"
#!/bin/bash

funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum$anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"

函数返回值在调用该函数后通过 $? 来获得。

4.4 数组:

#!/bin/bash

# 1 定义数
arr1=(A B C D)

# 2 修改数据元素
arr1[0]="aaaa"

# 3 获取元素内容
echo "第一个元素: ${arr1[0]}"
echo "第二个元素: ${arr1[1]}"
echo "第三个元素: ${arr1[2]}"
echo "第四个元素: ${arr1[3]}"

# 打印数据中的内容:

echo "打印所有数组,方式一: ${arr1[*]}"
echo "打印所有数组,方式二: ${arr1[@]}"


# 打印数组长度
echo "打印数组长度,方式一: ${#arr1[*]}"
echo "打印数组长度,方式二: ${#arr1[@]}"


# 遍历数据
echo "遍历数组,方式一:=================================="
for e in ${arr1[*]}; do
     echo $e
done


echo "遍历数组,方式二:================================="
for (( i=0; i<${#arr1[*]}; i++ )) {
   echo ${arr1[$i]}
}
[root@VM_0_8_centos xu]# ./b.sh 
第一个元素: aaaa
第二个元素: B
第三个元素: C
第四个元素: D
打印所有数组,方式一: aaaa B C D
打印所有数组,方式二: aaaa B C D
打印数组长度,方式一: 4
打印数组长度,方式二: 4
遍历数组,方式一:==================================
aaaa
B
C
D
遍历数组,方式二:=================================
aaaa
B
C
D

编写shell脚本,输入一个数字n并计算1~n的和:

#!/bin/bash
echo "请输入一个数字:"

read aNum

echo "你输入的数字为:$aNum"

a=0
for ((i=0;i<=$aNum;i++ ))
do

a=$(($a+$i))

done

echo $a

输入一个或多个文件,输出每个文件的行数:

#!/bin/bash
if [ $# -eq 0 ];then
  echo "please input file name"
else
  while [ -n "$1" ];do
  echo "the lines are: `wc -l $1 |cut -d " " -f 1`"
  shift
  done
fi
[root@VM_0_8_centos xu]# ./f.sh d.sh c.sh 
the lines are: 17
the lines are: 19

完!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Shell脚本是一种通过编写一系列命令来实现自动化任务的脚本语言。它是一种在Unix或类Unix操作系统中常见的解释性编程语言。 Shell脚本是一种非常实用的技术,可以用于各种任务,例如批量处理文件、管理系统配置和自动化任务等。 学习Shell脚本技术的入门步骤如下: 1. 学习Shell语法Shell脚本使用的是Shell语言的语法,因此需要先掌握Shell语法规则。可以通过在线教程或书籍学习Shell语法,理解脚本的结构、变量、条件判断、循环等基本概念。 2. 选择合适的Shell:常见的Shell有Bash(Bourne Again SHell)、Csh(C SHell)、Ksh(Korn SHell)等。Bash是最常用的Shell,适合大多数任务。选择一个Shell并深入学习它的功能和用法。 3. 编写简单的脚本:从简单的任务开始,例如创建一个Hello World脚本,尝试运行并查看结果。逐步增加复杂性,编写一些实用的脚本。可以使用编辑器,例如Vi或Nano,在终端中编写脚本。 4. 理解常用命令:Shell脚本是通过命令来完成任务的,因此需要熟悉一些常用的命令,例如ls、cd、grep、awk、sed等。可以通过查阅Shell命令文档或在线教程来学习这些常用命令的用法。 5. 学习脚本编程技巧:掌握一些高级的脚本编程技巧,例如重定向输入输出、处理命令行参数、使用函数和循环等。这些技巧可以增强脚本的功能和灵活性。 总之,学习Shell脚本技术需要掌握Shell语法,选择合适的Shell,并通过编写简单的脚本、学习常用命令和掌握脚本编程技巧来逐步提高技能。随着经验的积累,可以处理更加复杂的任务,并更高效地管理和自动化系统。 ### 回答2: shell脚本技术是一种编程语言技术,用于操作和自动化Linux和Unix操作系统下的命令行界面。它可以帮助用户通过一系列的命令组合和逻辑控制实现复杂的任务和操作。 要使用shell脚本技术,首先要了解基本的shell语法和命令。shell脚本是由一系列的命令和控制结构组成的文本文件。常见的shell是Bash,可以在终端中输入"bash"命令来启动。 在脚本中,我们可以使用变量来存储数据和结果。变量可以通过赋值来创建,例如: ``` name="John" ``` 然后可以通过"$"符号进行引用,例如: ``` echo "My name is $name" ``` 除了变量,我们还可以使用条件语句和循环结构来控制程序的执行流程。条件语句可以根据条件的真假执行不同的操作,例如: ``` if [ $age -ge 18 ]; then echo "You are an adult" else echo "You are a minor" fi ``` 循环结构可以用来重复执行一段代码,例如: ``` for i in {1..5}; do echo "Number: $i" done ``` 另外,shell脚本还支持函数的定义和调用。函数是一段可以被重复使用的代码块,例如: ``` function greet { echo "Hello, $1!" } greet "Alice" ``` shell脚本技术可以用于实现很多自动化任务,比如文件操作、系统管理、数据处理等。通过编写简单的脚本,我们可以减少重复的工作和简化复杂的操作流程。 总之,掌握shell脚本技术可以帮助我们更好地管理和操作Linux和Unix系统,提高工作效率。希望这个简单的入门介绍能给您一些帮助。 ### 回答3: Shell脚本是一种编程语言,通常用于自动化执行系统任务和命令。它是在操作系统上运行的命令行解释器,可以直接与操作系统交互。下面是Shell脚本技术的入门指南。 首先,了解Shell脚本的基本语法和结构非常重要。Shell脚本使用一系列命令来执行任务,可以通过编写一系列的命令来实现特定目的。可以使用任何文本编辑器编写Shell脚本,并将其保存为以.sh为扩展名的文件。 熟悉Shell脚本的变量和参数也很重要。Shell脚本中可以使用变量来存储和处理数据。变量使用$符号进行引用,例如$变量名。同时,还可以使用特殊变量(如$0表示脚本名称,$1表示第一个参数)来获取脚本的参数。 掌握条件判断和循环结构也是必不可少的。Shell脚本可以使用if语句来进行条件判断,根据条件的结果执行不同的命令。同时,可以使用for循环和while循环进行重复执行一系列的命令。 了解Shell脚本中的输入和输出是非常重要的。可以使用特定命令来获取用户的输入,如read命令。同时,可以使用echo命令将数据输出到屏幕上。还可以使用重定向和管道来重定向命令的输出或将多个命令连接起来。 熟悉Shell脚本中的函数和文件操作也是必要的。可以使用函数来组织和重复使用特定命令序列。同时,可以使用命令来对文件进行读取、写入和操作。 最后,要实践并练习Shell脚本技术。可以编写一些简单的脚本来完成常见的系统任务,如文件处理、文本处理、系统管理等。通过不断地实践和尝试,逐渐提高对Shell脚本的理解和掌握。 总之,通过学习Shell脚本的基本语法、变量和参数、条件判断和循环结构、输入和输出、函数和文件操作,并进行实践和练习,可以逐步掌握Shell脚本技术,从而能够更好地利用它来简化和自动化系统任务与操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值