Linux shell基本

本文介绍了Shell脚本的基础知识,包括如何创建和执行脚本、变量的使用、运算符、条件判断、流程控制以及函数。讲解了常用的系统变量、自定义变量、参数传递、条件表达式以及for、while循环的运用。还展示了read命令读取用户输入及自定义函数的创建方法。
摘要由CSDN通过智能技术生成
  • #!/bin/bash开头:指定解析器

  • .sh作为shell脚本文件后缀

test0.sh

#!/bin/bash

echo "hello world"
  • 执行脚本:
 % sh test0.sh  # 通过sh解析器执行脚本,所以脚本本身不需要执行权限
hello world

 % ./test0.sh  # 脚本自己执行,所以需要执行权限
hello world

1. 变量

1.1 常用系统变量

  • $HOME:家目录
  • $PWD:当前目录
  • $SHELL:默认shell解析器
  • $USER:当前用户

1.2 自定义变量:

变量=值:注意等号两边不能有空格!!

% A=1
% echo $A
% 1

撤销变量

% unset A

静态变量:不能unset撤销变量,不能修改B的值

% readonly B=3
  • 变量默认都是字符串类型,无法直接进行数值运算
  • 变量的值如果有空格要用双引号或单引号包裹起来
 % A=1+1
 % echo $A
1+1

 % A="a b"
 % echo $A
a b

1.3 特殊变量$n

n为参数,$0代表该脚本名称,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 如 9代表第一到第九个参数,十以上的参数需要用大括号包含如 9{10}

#!/bin/bash

echo $0 $1 $2 $3
 % ./test0.sh wu di 123
./test0.sh wu di 123

1.4 特殊变量$#

获取所有输入参数个数(不包括脚本名),常用于循环

#!/bin/bash

echo $#
% ./test0.sh wu di 123
3

1.5 特殊变量 $* / $@

把所有参数看成一个整体(不包括脚本名)

#!/bin/bash

echo $*
echo $@
 % ./test0.sh wu di
wu di
wu di

1.6 特殊变量 $?

返回上一条执行的命令返回状态,如果$?值为0则上一条命令正确执行。如果非0(具体哪个数由命令自己决定)则证明上一个命令执行不正确

% ls 
% echo $?
0

2. 运算符

  • $((运算式))

    % echo $((3+4))
    7
    
  • $[运算式] 推荐

    % echo $[3+4]
    7
    % echo $[(2+3)*4]  # (2+3)*4
    20
    
  • expr 注意:运算符有:+加,-减,\*乘,/除,%余。运算符之间必须要有空格

    % expr 3 \* 4
    12
    % expr `expr 2 + 3` \* 4  # (2+3)*4
    20
    

3. 条件判断

**[ condition ]**注意condition前后要有空格

条件非空即为true,如[ wudi ]返回true,[]返回false

% [ wudi ]
% echo $?
0  # 说明上一条指令正确,即[]返回true

% []      
zsh: no matches found: []
% echo $?
1  # 说明上一条指令不正确,即[]返回false

3.1 常用判断条件

  • 两个整数之间比较:

    =字符串比较

    -lt 小于 less than

    -le小于等于 less equal

    -eq等于 equal

    -gt大于 greater than

    -ge大于等于 greater equal

    -ne不等于 not equal

    % [ 1 -lt 2 ]  # 1<2
    % echo $?                   
    0  # 正确
    
  • 按照文件权限进行判断

    -r 有读的权限

    -w 有写的权限

    -x 有执行的权限

    % [ -r test0.sh ]  # 判断test0.sh是否有读权限
    % echo $?        
    0  # 正确
    
  • 按照文件类型进行判断

    -f 文件存在且是常规文件

    -e 文件存在

    -d 文件存在并是一个目录

    % [ -d test0.sh ]  # 判断test.sh是否是一个目录
    % echo $?        
    1  # 错误
    

3.2 多条判断语句:&& ||

% [ 3 -lt 4 ] && [ 6 -gt 3 ]  # 3<4 && 6>3
% echo $?
0  # 正确

% [ 3 -lt 4 ] && [ 6 -gt 7 ]  # 3<4 && 6>7
% echo $?                   
1  # 错误

% [ 3 -lt 4 ] || [ 6 -gt 7 ]  # 3<4 || 6>7
% echo $?                   
0  # 正确

4. 流程控制

4.1 if判断

  • [ 条件判断式 ]中括号和条件判断式中间必须有空格
  • if后面要有空格
if [ 条件判断式 ]
then
	程序
fi

例子:输入1打印wu,输入2打印d

#!/bin/bash

if [ $1 -eq 1 ]
then
    echo "wu"
elif [ $1 -eq 2 ]
then
    echo "di"
fi

运行结果

 % ./test0.sh 1
wu
 % ./test0.sh 2
di

4.2 case语句

#!/bin/bash

case $1 in 
1)  # 如果变量值等于1,执行下面语句
    echo "当参数是1时"
;;
2)  # 如果变量值等于2,执行下面语句
    echo "当参数是2时"
;;
*)  # 如果变量值不等于以上值,执行下面语句
    echo "默认"
;;
esac  # case倒着写

运行结果

 % ./test0.sh 1                                                        
当参数是1时
 % ./test0.sh 2
当参数是2时
 % ./test0.sh 3
默认

4.3 for语句

基本语法1

for((初始值;循环控制条件;变量变化))
do
	程序
done

例子:1加到100

#!/bin/bash

s=0
for((i=0;i<=100;i++))
do
    s=$[$s+$i]
done
echo $s

基本语法2

for 变量 in 值1 值2 值3 ...
do
	程序
done

例子:打印所有输入参数

#!/bin/bash

for i in $*
do
    echo "输入了 $i"
done

4.4 while语句

  • [ 条件判断式 ]中括号和条件判断式中间必须有空格
  • While后面要有空格
while [ 条件判断式 ]
do
	程序
done

例子:从1加到100

#!/bin/bash

s=0
n=0
while [ $n -le 100 ]
do
    s=$[$s+$n]
    n=$[$n+1]
done
echo $s

5. read读取控制台输入

read(选项)(参数)

选项:

  • -p:指定读取值时的提示符
  • -t:指定读取值时等待的时间(秒)

参数:

  • 变量:指定读取值的变量名(读取到的内容极为该变量的值)

例子:提示3秒内,读取控制台输入的名称

#!/bin/bash

read -p "请在3秒内输入" -t 3 NAME
echo $NAME

6. 函数

6.1 系统函数(可以直接调用)

  • basename函数:从给定的文件路径中返回文件名

     % basename ~/Desktop/notes/tests/shelltest/test0.sh 
    test0.sh
     % basename ~/Desktop/notes/tests/shelltest/test0.sh .sh  # 并删除.sh后缀
    test0
    
  • diename函数:从给定的文件路径中返回路径部分

     % dirname ~/Desktop/notes/tests/shelltest/test0.sh 
    /Users/wudi/Desktop/notes/tests/shelltest
    

6.2 自定义函数

[ function ] funname[()]
{
	程序
	[return int;]
}
  • 必须在调用函数地方之前,先声明函数,shell脚本是逐行运行的
  • 函数返回值,只能通过$?系统变量获得。可以显式通过return返回(return后跟数值n(0-255))。如果不加,则以最后一条命令运行结果作为返回值。

例子:计算两个数字和

#!/bin/bash

function sum()
{
    s=0
    s=$[$1+$2]  # 注意这里指的是函数参数
    return $s
}

read -p "输入第一个参数:" P1
read -p "输入第二个参数:" P2
sum $P1 $P2  # 调用函数
echo "the answer is $?"

运行结果

 % ./test0.sh 
输入第一个参数:3
输入第二个参数:5
the answer is 8
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值