LinuxC高级_day3

LinuxC高级_day3

【1】shell脚本

  1. 本质: 命令的有序集合
  2. 1)说明性语句 # 不会被解释执行
    2)功能性语句 shell命令 shell程序
    3)结构性语句 条件测试 多路分支 循环控制
  3. 怎么创建一个shell脚本
    1) touch test.sh
    2) chmod 777 test.sh 给权限
    3)vim test.sh
    #! /bin/bash — 告诉系统我要使用bash解析
    4)./test.sh 执行脚本
  • 执行脚本的方式
    ./脚本名 文件执行必须需要可执行权限
    bash 脚本名 没有权限也可以执行
    source 脚本名没有权限也可以执行

./ bash 开一个新的子终端 执行之后把结果以字符串形式返还回来
source直接在终端解析cd ~会回到家目录

[练习1]

  1. 在Desktop下面创建0729文件夹
  2. 进入0729创建file1 到 file5 五个文件
  3. 删除file2 file3 使用通配符删除
  4. 将0729打包并压缩成.tar.gz
  5. 拷贝压缩包到家目录下并解压
  6. 删除压缩包
  7. 列出该目录下的详细内容
    在这里插入图片描述

[练习2]

  1. 在用户主目录(家目录)下创建两个目录 subdir1 subdir2
  2. 将/etc/passwd 文件拷贝到subdir1 将/etc/group 文件拷贝到subdir2
  3. 将subdir2重命名为subdir
  4. 把subdir1打包并压缩为xz格式
  5. 拷贝压缩包到subdir下面
  6. 拆包并解压
  7. 查看subdir目录下所有的文件
    在这里插入图片描述

【2】shell脚本的变量
shell脚本的变量不需要定义 不支持数据类型(int float都没有) 所有的都解释为字符串

  1. 用户自定义变量
    1)一般情况使用大写
    2)赋值的时候左右不能有空格
    3)输出一个变量的值
    $变量名
    ${变量名}
    * echo $VAR1 printf怎么使用???
    4)unset 删除一个变量的赋值
    5)readonly可以修饰一个只读变量 和const一样
  • eg:
	VAR1=hello #hello就是一个字符串了 不能有空格
	echo $VAR1  
    
	VAR1='hello world' #''可以有空格但是不能引用变量
    echo $VAR1

    VAR1='hello world' #""既可以有空格 也可以引用变量
    VAR2="haha $VAR1"     
    echo $VAR2

[练习] 交换两个变量的值
var1=“www.baidu.com”
var2=“www.google.com”
在这里插入图片描述

  1. 位置变量
    $0 命令行参数 包含脚本的名字(脚本名对应的字符串)
    $1 - $9 命令行1-9个参数
    ${10} 第十个参数
    $# 命令行参数的个数(不包含脚本名)
    $* $@ = {$1...} 所有命令行的参数(不包含脚本名)
    $?前一个命令的退出状态 (0为真 1为假)

  2. 环境变量
    echo $HOME

  3. 命令置换 ``

	temp=`ls -l` 
	echo $temp
  1. #注释

[练习] 从命令行交换两个命令

test.sh
bash test.sh ls -l ls . >
在这里插入图片描述

【3】功能性语句

  1. read
    read var1 var2 var3
    把读入行的第一个参数给var1 第二个给var2 剩余的给var3
    #echo "please input num:"
    read -p "please input : " var1 var2 var3
    echo $var1
    echo $var2
    echo $var3

  2. expr

    1. 简单的算术运算+ - \* / %
      1. 乘号加转义字符 *` 否则会认为是通配符
      2. 小括号要加转义字符\( \)
      3. expr自带打印功能
      4. 每一个算术运算符左右都要有空格
      5. expr结果给一个变量的时候要加命令置换或者$()
      6. expr不能进行++ --的操作
      7. 算术运算引用变量的时候要加$符号

eg:

	var1=5
	var2=3                     
	expr $var1 \* $var2
	#expr $var1++
	var1=`expr $var1 + 1`
	var1=$(expr $var1 + 1)
	echo $var1

[练习] 计算表达式 a*b+c-d/b a=2 b=3 c=15 d=18
从终端输入4个数字
在这里插入图片描述

2)字符串操作

  1. 求字符串的长度
 expr length $str
 str=www.baidu.com
 expr length $str  === 13
  1. 子字符串第一次在源字符串出现的位置
 expr index 源字符串 子字符串
 expr index $str "du"  === 8
  1. 字符串截取
 expr substr 源字符串 起始位置 长度
 expr substr $str 5 5     === baidu
  1. 字符串比较
     expr match 源字符串 子字符串
     成功返回字符串长度 不成功返回0
     expr match $str "www.baidu.com"    === 13
     expr match $str "www.baidu"        === 0
  1. let
    1. 不会自己打印
    2. 算术运算符左右两边不能有空格
    3. 引用变量的时候可以不加$
    let num=1+2
	let n=$num+3
	let n=n**2  #表示取平方
	echo $n   
  1. test测试的对象有三种 字符串 整数 文件属性
    1)字符串测试
    s1 = s2 两个字符串内容是不是一致
    s1 != s2两个字符串内容是不是不一致
    -z s1 s1长度是否为0
    -n s1 s1长度是否不为0
    2)整数的测试
    a -eq b 测试a b是否相等
    a -ne b 测试a b是否不相等
    a -gt b 测试a是否大于b
    a -ge b 测试a是否大于等于b
    a -lt b测试a是否小于b
    a -le b测试a是否小于等于b
    3)文件属性测试
    -d name 测试name是否是一个目录
    -f name 测试name是否是一个普通文件
    -e name测试文件是否存在

eg:

    read var
	test "$var" = "hello"
	echo $?   

	read num
    test $num -eq 5
    echo $?   
  1. (())的用法
    ((表达式))
    1)(())内部语法和C语言是一样
    2)如果想要取得 (())的值 要加$
    3) (())引用变量的时候可以加$ 也可以不加
    4)((表达式1,表达式2,…表达式n))以最后一个表达式的结果作为整个的结果
    5)(())可以写复杂的语句

eg:

    echo $((($1%4==0 && $1%100!=0)||($1%400==0)))   === 1
    echo $?                                         === 0 
    
     sum=0
	 for ((i=0;i<=100;i++))
	 {
	     ((sum+=i))
	 }
	 echo $sum

【4】shell数组

  1. shell只存在一维数组 不存在多维数组
  2. shell数组没有大小
  3. 定义格式
    arr=(11 22 33 44)
    arr=($1 $2 $3)
    arr=([0]=11 [5]=22 [10]=adbf)
    read a b c d
    arr=($a $b $c $d)
  4. 数组成员访问
    ${arr[i]}访问数组的某一个成员
    ${arr[@]} ${arr[*]} 访问数组里所有的成员
  5. 求大小
    ${#arr[i]} 某一个成员的长度
    ${#arr[*]} 已被赋值的成员的个数
    [练习]
    1. 数组成员追加
      arr1=(11 22 33)
      给arr1增加一个成员hello
    arr1=(11 22 33)+0
	#arr1[${#arr1[*]}]=hello
	arr1=(${arr1[*]} hello)
	echo ${arr1[@]}            
  1. 数组的合并
    arr2=(haha lala)

  2. 从命令行输入任意多个参数对他们求和

在这里插入图片描述

另一篇shell的,相互补一下吧

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值