33 Shell
lix_uan 592 1

Shell脚本入门

  • centos默认的shell解析器是bash

  • 脚本以#!/bin/bash开头(指定解析器)

变量

常用的系统变量

  • $HOME、$PWD、$SHELL、$USER

基本语法

  • 定义变量:变量=值
  • 撤销变量:unset 变量
  • 声明静态变量:readonly变量,不能unset

变量定义规则

  • 可以由字母、数字、下划线构成,但不能以数字开头
  • 环境变量名大写
  • 等号两侧不能有空格
  • 在bash中,变量默认类型是字符串型,无法直接进行数值运算
  • 变量的值如果有空格,需要使用双引号或单引号括起来

特殊变量

$n

  • $0 代表脚本名称
  • $1-$9 代表第一到第九个参数

$#

  • 获取所有输入参数个数,常用于循环

$*

  • 代表命令行中所有参数,把所有参数看成一个整体,"$*"

$@

  • 也代表命令行中所有的参数,不过把每个参数区分对待,"$@"

$?

  • 最后一次执行命令的返回状态,如果这个变量的值为0代表正确执行

运算符

  • $((运算式))$[运算式]

条件判断

  • [ 条件 ]

常用判断条件

  • 两个整数之间的比较

    ==  #字符串比较
    -lt    #小于    
    -le    #小于等于
    -eq #等于 
    -ne #不等于
    -gt    #大于    
    -ge #大于等于
    [ 23 -ge 22 ]
    echo $?
  • 按照文件权限进行判断

    -r    #可读
    -w    #可写
    -x    #可执行
    [ -w helloworld.sh ]
    echo $?
  • 按照文件类型进行判断

    -f    #文件存在且是一个常规文件
    -e    #文件存在
    -d    #文件存在并且是一个目录
    [ -e /home/atguigu/cls.txt ]
    echo $?

流程控制

if判断

#!/bin/bash

if [ $1 -eq "1" ]
then
    echo "banzhang zhen shuai"
elif [ $1 -eq "2" ]
then
    echo "cls zhen mei"
fi

case语句

!/bin/bash

case $1 in
"1")
    echo "banzhang"
;;

"2")
    echo "cls"
;;
*)
    echo "renyao"
;;
esac

for循环

#!/bin/bash

s=0
for((i=0;i<=100;i++))
do
    s=$[$s+$i]
done
for i in $*
    do
      echo "ban zhang love $i "
    done

while循环

#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
    s=$[$s+$i]
    i=$[$i+1]
done

read读取控制台输入

  • read (选项)(变量)

    • 选项:-p:指定读取时的提示符;-t:指定读取时的等待时间(秒)
    • 变量:指定读取值时的变量名
    #!/bin/bash
    
    read -t 7 -p "Enter your name in 7 seconds " NAME
    echo $NAME

函数

系统函数

  • basename:文件名

    basename /home/lixuan/banzhang.txt 
    banzhang.txt
  • dirname:文件绝对路径,不包括文件名

    dirname /home/lixuan/banzhang.txt 
    /home/lixuan

自定义函数

#!/bin/bash
function sum()
{
    s=0
    s=$[ $1 + $2 ]
    echo "$s"
}

read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;

Shell工具

  • cut
  • awk
  • sort
评论区

索引目录