LINUX 入门 0.3

LINUX 入门

零声课程链接

shell练习

day2 20240423

day3 20240424

耗时180min

一开始都要加#!/bin/bash

1变量

  1. 命名,定义(没空格)
  2. 使用 $xx ${xx}
  3. 只读 readonly xx
  4. 删除 unset xx; 删不了只读
  5. type: 局部;环境;shell

2字符串

可以无引号

  1. 单引号: 成对出现;引号内变量无效
  2. 双引号:单个可以出现用转义;引号内变量有效
  3. 拼接:直接连着打印就行
  4. 长度:${#xx}
  5. 子串:${xx: 起点:终点}
  6. 找子串:反引号 io哪个 字母先出现就计算), echo `expr index “$xx” 待选的多个字母io``

3数组

仅1维,无多维; 下标0开始;不能<0

  1. 定义 array_name=(value0 value1 value2 value3);array_name[0]=value0
  2. 读数组元素:echo ${array_name[@或者下标]} @代表所有
  3. 长度:
    1. 取得数组元素的个数length=${#array_name[@]}
    2. 取得数组单个元素的长度 lengthn=${#array_name[n]}

4注释

单行#

多行 :<<EOF … EOF eof可以是任何符号

报错:发现出鬼了:**EOF !都行,但是唯独单引号‘**就是不行

warning: here-document at line 5 delimited by end-of-file (wanted `EOF`

解答:

末尾的EOF后面带有空格,EOF前后都不应有空格或其他符号。去掉EOF两边的空格和符号后,执行通过。

5 shell传递参数

  1. 获取命令行的每个参数 $n n代表第几个参数, so 语句后面可以加或者不加;都行

    $ ./test.sh 1 2 3 
    
    Shell 传递参数实例! 执行的文件名:./test.sh  # 这是第0个参数
    第一个参数为:1 
    第二个参数为:2 
    第三个参数为:3
    
  2. 特殊字符 自己查吧P17

    1. $# 取参数个数
    2. $* 作为一个“”string打印; $@作为n个""string分别打印看例子

6 运算符

  1. 算术运算符

    表达式直接算不是‘’是反引号`要有空格,2+2错, 2 + 2

    *必须转义符\ \*

    条件[]要有空格 [ $a != b ] , [ b ], [ b],[a != $b]没空格就是错的

    #!/bin/bash
    
    a=5
    b=4
    val=`expr $a \* $b`
    val2=`expr 2 \* 3`
    
    echo $val $val2
    
  2. 关系[]

    -ge -gt -lt -le -eq -ne 只能比数字,比不了string

  3. bool []

    与-a(and) 或-o(or) 非!

  4. 逻辑[[]]]要双括号!!!!! : && ||

  5. string运算:

    =, !=

    长度-z $a; 非零-n $a

    空 $ 空返回false

  6. 检测文件属性,没看,用了查就行

7 echo

  1. 打印字符串: 可不加""
  2. 打印双引号加转义\
  3. 变量:$
  4. echo -e “OK! \n” # -e 开启转义
  5. echo -e “OK! \c” # -e 开启转义 \c 不换行
  6. 显示结果定向至文件,不打印在屏幕: echo “It is a test” > myfile
  7. 单引号:原样输出字符串,不进行转义或取变量
  8. 显示命令执行结果 echo date

8 printf

默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n

  1. printf “%-10s %-8s %-4.2f\n” 郭靖 男 66.1234
  2. %-10s 10s 指一个宽度为 指一个宽度为 10 个字符( -左对齐,没有默认右对齐)
  3. %-4.2f 宽度4的float, 保留2位小数

转义含义:自己查表吧

9 test

  1. 数值:test $[num1] -eq $[num2] 6个
  2. string:test $num1 = $num2 4个
  3. 文件测试

10 流程控制

  1. if: 可以分行,或者

    if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
    

    多个

    if condition1 
    then 
    	command1 
    elif condition2 
    then 
    	command2 
    else
    	commandN
    fi
    
  2. for

    for loop in 1 2 3 4 5 
    do 
    	echo "The value is: $loop"
    done
    
  3. while

    while(( $int<=5 ))
    do 
    	echo $int 
    	let "int++" 
    done
    

    let

    它用于执行一个或多表达式变量计算中不需要加上$来表示变量

  4. 无限循环

    2中while,一种for

  5. until循环

    一般为 条件表达式,如果返回值false 则继续执行循环体内的语句 和while反的

  6. case: 模式和执行到;;结束

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

    esac结束

    ;;代表break

  7. 跳出: continue, break

11 函数

  1. def

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

    参数可以不写!

    调用返回值 用**$?**

    必须在使用前定义,不存在类似C++的声明

  2. 函数参数

    $n n<10

    ${n} n>=10

    $* 一个“”来获取所有参数

    $# 其他查表

12 输入 /输出重定向

自己查表: 向右输出 向左输入

0标准输入 1标准输出 2标准错误

  1. 输出

    直接在命令行或者在.sh里写都行,最前面的$不用加

    #!/bin/bash
    who > users
    cat users
    

    如果不希望文件内容被覆盖,可以使用 >> 追加到文件末尾

  2. 输入

    command1 < infile > outfile
    

    stdin重定向到infile,从infile读入输入,stdout重定向到Outfile输出写入到outfile

  3. 深入

    运行命令时 同时打开stdin0 stdout1 stderr2

    command 2 > file
    command 2 >> file 输出错误追加到file结尾
    

    stdout和stderr合并重定向到file; 用>&合并重定向

    command > file 2>&1
    
  4. Here document

    delimiter前后不要乱加空格 tab,delimiter可以叫EOF 或其它符号都行!别用单引号,因为document部分里可能有单引号,会混乱的

    command << delimiter 
    	document 
    delimiter
    
    命令行里
    wc -l <<EOF
    	欢迎来到 
    	零声学院 
    	www.0voice.com 
    EOF
    输出 3
    
    脚本里
    #!/bin/bash 
    cat << EOF 
    	欢迎来到 
    	零声学院 
    	www.0voice.com 
    EOF
    
  5. /dev/null

    是一个特殊的文件,写入到它内容都会被丢弃;如果尝试从该读取那什也读不到 禁止输出的效果

    command > /dev/null
    

13 文件包含

. 或者source 要有空格

就是直接用某个sh文件内的代码,同时,

注: 被包含的文件不需要手动添加可执行权限 不用chmod +x 名.sh

#使用 . 号来引用test1.sh 文件 
. ./test1.sh 
# 或者使用以下包含文件代码 
source ./test1.sh 
echo "零声学院官网地址:$url"
  • 28
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值