首页 > 系统相关 >C高级(3):shell脚本

C高级(3):shell脚本

时间:2024-08-02 09:54:34浏览次数:15  
标签:脚本 语句 shell 变量 10 高级 echo 命令 NUM

目录

1shell的基础概念:

1.1概念

1.2创建和执行

2变量

2.1用户自定义变量

2.2位置变量

2.3预定义变量

2.4环境变量

3功能语句

3.1说明性语句

3.2功能性语句

1)read

2)expr

3)let

4结构性语句

4.1if语句

4.2case语句

4.3for循环

4.4while

4.5循环控制语句


1shell的基础概念:

1.1概念

shell的使用方式:手动命令和脚本

shell脚本的本质:shell命令的有序集合,扩展名可以为.sh,也可以没有

shell不仅是一个应用程序还是一种脚本语言

1)编译型语言:c ,java ,c++ ,当中间出错,err直接结束,修改重新编译运行

2)解释型语言:shell python,不需要编译直接执行,当中间出粗偶,智慧在错误的地方报错,但是不会影响后面的内容;解析一条指令,执行一条指令

1.2创建和执行

创建shell脚本:

touch test.sh

第一行写:#!/bin/bash

解释性信息,意思是使用/bin/bash来解释执行

执行方式:

1.chmod 777 test.sh :是脚本具有执行权限

./test.sh

2.sh test.sh (不要用,应急shell)

例如:

#!/bin/bash
touch file34.c

练习:

1)在上级目录下创建file1.c file2.c 两个文件

2)将该两个文件移动到家目录

3)将两个文件用tar压缩成gz的格式

#!/bin/bash
cd ..
touch file1.c file2.c
mv file1.c file2.c ~
cd 
tar -czf file.tar.gz file1.c file2.c

2变量

2.1用户自定义变量

一般用大写

进行赋值用=,左右两边不能有空格

引用变量前面加$

2.2位置变量

$0,与输入的命令行一样,包含脚本名字 xx.sh

$1 , $2 .... $9 :分别包含第一个到第九个命令行参数

$#:命令行参数的个数,不包含脚本文件

$@:所有命令行参数

$*:所有命令行参数

2.3预定义变量

$?前一个命令的退出状态(0为真,非零为假)

$$正在运行进程的ID号

2.4环境变量

变量没有类型

环境变量一般指在操作系统中用来指定操作系统运行环境的一些参数,比如临时文件夹位置、系统文件位置等

HOME /etc/passwd文件中列出的用户的主目录

PATH shell搜索路径,一系列的目录

3功能语句

3.1说明性语句

以#开头

注释用#

3.2功能性语句

1)read

功能:read从标准输入读入一行,并赋值给后面的变量

格式: read VAR1 VAR2 VAR3

读入行的第一个单词赋值给var1 ,第二个单词赋值给var2,..其余所有都赋值给最后一个变量

read -p "提示语句" 变量名 : 可以将提示语句输出,同时输入变量

2)expr

格式:expr 表达式

算术运算符命令expr主要用于简单的整数运算, 加(+),减(-)乘( \*) 除 (/)取余 (%)

例:

expr 12 + 5 \* 3

注意:

1)表达式符号之间必须用空格间隔

2)expr引用变量必须$

3)expr自带打印功能

4)使用乘号\* 小括号\( \) 需要转义

  1. 把expr的结果赋值给变量需要命令置换符
  2. expr不能进行++ -- 操作
#!/bin/bash
VAR=5
NUM=`expr \( 2 + $VAR \) \* 4`
# ((NUM++))
echo $NUM

练习2:通过expr实现变量自加运算

#!/bin/bash
NUM=5
NUM=`expr $NUM + 1`

echo $NUM #6

练习2:计算表达式值a*b+c-d/b,a=2,b=3,c=15,d=18

要求:

1)从终端读入4个数a,b,c,d

2)进行运算

3)打印结果输出到终端

3)let

let 表达式

  1. 运算的时候运算符左右两边不能有空格
  2. 不能自己打印,输出需要用echo
  3. let语句可以不加$引用变量
  4. let n=n**2 表示平方
  5. 可以++ -- ,()转义,*不转义

4)test

可以测试三种对象:字符串 整数 文件属性

1.字符串测试

s1 = s2 测试两个字符串是否完全一样

s1 != s2 测试两个字符串是否有差异

-z s1 测试s1长度是否为0

-n s1 测试s1长度是否不为0

​​​​​​​2.整数的测试

$a -eq $b 测试a与b是否相等 equal

$a -ne $b 测试a与b是否不相等 not equal

$a -gt $b 测试a是否大于b greater than

$a -ge $b 测试a是否大于等于b

$a -lt $b 测试a是否小于b less than

$a -le $b 测试a是否小于等于b

#!/bin/bash
NUM=10
test $NUM -eq 1
echo $? #1

test $NUM -ne 10
echo $?#1

test $NUM -lt 15
echo $?#0


​​​​​​​​​​​​3.文件属性测试

测试name 是否为一个目录 -d name

测试name 是否为一个普通文件 -f name

测试name 是否存在 -e name

4结构性语句

4.1if语句

1)基本结构

if 条件

then

     命令表1

else

     命令表2

fi

#!/bin/bash
read NUM
if test $NUM -eq 10
then
    echo "=10"
else
    echo "!=10"
fi

2)分层结构

if 条件1

then

     命令表1

elift 条件2

then

      命令表2

else

      命令表3

fi

#!/bin/bash
read NUM
if test $NUM -eq 10
then
    echo "=10"
elif test $NUM -gt 10
then
    echo ">10"
else
    echo "<10"
fi


3)嵌套结构

if 条件

then

      if 条件

      then

            命令表1

      else

            命令表2

      fi

else

      命令表2

fi

4)判断语句其他格式

if [ 条件 ];

then

      命令表1

else

      命令表2

fi

注意:

if 和 fi是条件语句的括号,必须成对使用

命令表中的命令可以一条也可以多条

注释整段代码:

if false

then

fi

#!/bin/bash
read NUM
if false
then 
    if test $NUM -ge 10
    then
        if test $NUM -gt 10
        then
            echo ">10"
        else
            echo "==10"
        fi
    else
        echo "<10"
    fi
fi

if [ $NUM -ge 10 ]
then
    echo ">=10"
else
    echo "<10"
fi

补充:

-o 或运算 例如 [ $a -lt 20 -o $b -gt 100 ] 返回 true

-a 与运算 例如 [ $a -lt 20 -a $b -gt 100 ] 返回 false

! 非运算 例如 [ ! false ] 返回 true

&& 逻辑与 例如 [[ $a -lt 100 && $b -gt 100 ]] 返回 false

|| 逻辑或 例如 [[ $a -lt 100 || $b -gt 100 ]] 返回 true

| 位或 例如 echo $[2|2]

&位与 例如 echo $[2&1]

练习:从终端输入3个整数;从小到大排序

4.2case语句

格式:

case 变量 in

模式1)

      命令表1

      ;;

模式2)

      命令表2

      ;;

......

*)

      命令表n

      ;;

esac

注意:

1)case语句只能检测字符串变量

2)命令表以单独的;;结束,退出case语句

3)模式n通常写为*,表示其他所有的模式

4)case匹配项中可以存在多个模式,每种模式之间|隔开

4.3for循环

格式:

for 变量名 in 单词表

do

命令表

done

变量依次从单词表中读取各个单词,每取一次单词,就执行一次循环体中的命令表,循环次数由单词表中的单词数决定,命令表中的命令可以一条,也可以是由分号或换行符分隔开的多条。

例如:

for语句的几种基本书写格式:

1)for i in 1 2 3 4 5

do

....

done

变量i从单词表中取值

2)for i

do

...

done

变量i从命令行取值,可以省略in 单词表

3)for i in {1..10}

do

...

done

变量i从1-10取值

4)for ((i=0;i<10;i++))

do

...

done

书写格式类似于c语言

#!/bin/bash
#1)
# for i in 1 2 3 4 5
# do
#     echo -n "$i  "
# done
# echo 

#2)
# for i 
# do
#     echo -n "$i  "
# done
# echo 

#3)
# for i in {1..10}
# do
#     echo -n "$i  "
# done
# echo 

# 4)
for ((n=1;n<=10;n++))
do 
    echo -n "$n  "
done
echo 

练习:实现1-10求和

4.4while

格式:

while 命令或表达式

do

命令表

done

while语句首先测试其后的命令或表达式的值,如果为真,就执行一次循环体中的命令,然后再测试该命令或表达式的值,执行循环体,直到该命令或表达式为假时退出循环。

4.5循环控制语句

break n:结束n层循环

continue n:结束n层本次循环,继续外层循环

#!/bin/bash
for ((i=0;i<3;i++))
do
    for ((j=0;j<4;j++))
    do
        if test $j -eq 2
        then
            # break  #00 01  10 11  20 21 
            # break 2 #00 01 
            # continue #00 01 03 10 11 13 20 21 23
            # continue 2 #00 01 10 11 20 21
        fi
        echo -n "$i $j ,"
    done
done
echo

标签:脚本,语句,shell,变量,10,高级,echo,命令,NUM
From: https://blog.csdn.net/thh135/article/details/140843727

相关文章

  • C高级(2)linux命令
    目录1系统维护命令1.1man1.2su1.3sudo1.4df命令1.5mount命令2用户管理命令3进程管理命令3.1ps3.2top3.3修改优先级3.4grep命令3.5kill命令3.6前后台切换命令4网络管理命令4.1命令5文件系统管理命令5.1文件系统分类5.2根文件系统结构5.3文件内容显示5.4链......
  • Python cv2库 批量压缩图片jpg、png 脚本
    效果图:(1)压缩前:10.9M   (2)压缩后:1.46M(3)直接上代码,#设置压缩质量0-100,0最差,100最好compression_params=[int(cv2.IMWRITE_JPEG_QUALITY),50]importcv2importosPATH=r'F:\aa_jpg'#压缩该路径下的图片,压缩后会保存到原路径defresizeImage(f......
  • Shell入门(保姆级教学)
    Shell是一种命令行解释器,也是一种脚本语言,广泛应用于Unix和类Unix系统中,例如Linux。它是用户与操作系统内核交互的桥梁,通过Shell可以执行系统命令、管理文件系统、处理文本数据等。本文将带你入门Shell编程,涵盖基础的语法、常用命令和一些实用技巧。Shell编程跟JavaScript、......
  • 如何通过PowerShell批量修改O365用户的office phone属性值
    我的博客园:https://www.cnblogs.com/CQman/如何通过PowerShell批量修改O365用户的officephone属性值?需求信息: 组织中的O365用户在创建时,已手动录入了办公电话(Officephone),现在需要在办公电话前面加上统一的数字,如“0571-0985”,以批量的方式统一修改。备注:O365用户的Offic......
  • where /? 在 Windows 中,where 命令是用于在命令提示符或 PowerShell 中查找指定命令的
     在Windows中,where命令是用于在命令提示符或PowerShell中查找指定命令的位置的工具。它可以帮助用户确定系统中某个可执行文件的路径。使用方法:基本用法:shellCopyCodewherecommand其中command是你要查找的命令或可执行文件的名称。例如,如果你想查找notepad的......
  • 嵌入式软件--C语言高级 DAY 8 函数
    函数是C语言尤为重要的知识点,再嵌入式的学习过程中,对51和32的单片机的学习是重中之重。一、函数的基本概念1.介绍函数是一种可重复使用的代码块,用于执行特定的任务或操作。函数允许我们将代码逻辑组织成独立的单元,从而提高了代码的可读性、可维护性和重用性。一个C程序可......
  • 数据库教程:从基础操作到高级应用
    数据库教程:从基础操作到高级应用大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!数据库是现代软件开发的核心组成部分之一。掌握数据库的基础操作以及高级应用技术对于开发人员而言至关重要。本文将从基础操作开始,逐步深入到数据库的高级应用,包括SQL语句......
  • Java多线程编程详解:从基础到高级
    Java多线程编程详解:从基础到高级大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!Java的多线程编程允许程序同时执行多个任务,提高了应用的性能和响应能力。本文将从基础到高级,全面介绍Java中的多线程编程,包括线程的创建、线程池、同步机制及并发工具的使用......
  • 【python脚本打包成exe】
    python项目打包成exe安装包分为三部分:1.python项目打包成可执行文件,依赖于一个python插件包pyinstaller        通过pipinstallpyinstaller安装即可。2.将python项目打包成可执行的exe文件及其依赖包        2.1在项目根目录下,输出python项目的配置文件(x......
  • MySQL高级——MySQL的储存过程
    目录一、什么是储存过程 二、变量定义2.1局部变量2.2用户变量(会话变量) 2.3系统变量 2.3.1全局变量2.3.2会话变量三、定义参数四、分支流程4.1if判断4.2case分支  五、循环流程5.1循环-while5.2循环-repeat 5.3循环-loop 六、游标 七、异常......