ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

SHELL

2021-12-18 19:32:54  阅读:183  来源: 互联网

标签:bin SHELL 变量 是否 echo let bash


练习题网站

执行脚本方式

  1. +x权限
  2. bash
  3. source

source不开启子进程,其他两种会开启子进程

bash和source无需x权限

重定向输出信息

  1. 重定向正确输出 > /dev/null
  2. 重定向错误输出 2> /dev/null
  3. 重定向所有输出 &> /dev/null

自定义变量

a=10

echo ${a}RMB //{}用于隔开变量与常量,避免混淆

export a=10 //发布为全局变量

export -n a //将全局变量恢复为局部变量

位置变量与预定义变量

$1 执行脚本时后面第1个位置参数

$2 执行脚本时后面第2个位置参数

$3 执行脚本时后面第3个位置参数

$* 执行脚本时后面所有位置参数

$# 执行脚本时后面位置参数的个数

$$ 随机进程号

$? 判断上一条指令是否执行成功,0是成功,非0是失败

例子

创建用户

vim useradd.sh

#!/bin/bash
read -p "请输入用户名:" username
stty -echo
read -p "请输入密码:" passwd
stty echo
useradd $username
echo "$passwd" | passwd --stdin $username

屏蔽回显 stty -echo

恢复回显 stty echo

加减乘除、取模(取余数)

  1. 使用expr工具

例子:

expr 1 + 1

expr 2 - 1

expr 1 '*' 1 或 expr 1 \* 1

expr 1 / 1

expr 2 % 1
  1. echo $[1+1] 或echo $((1+1))

  2. let 运算后无任何输出

    • let c=$a+$b
    • echo $c
    • let a=a+2 或 let a+=2
    • let a-=2
    • let a*=2
    • let a/=2
    • let a%=2

    对变量自增减

    • let a++
    • let a--
  3. bc(支持小数运算)

    • echo "1.1+2.2" | bc
    • echo "scale=3;10/3" | bc //scale表示计算结果保留几位小数
    • echo "1+1;2+2" //分号隔开,同时多个运算

条件测试

test a == a 或 [ a == a ]

echo $?

a=abc

b=xyz

[ $a == $b ] //使用变量判断两个变量的值是否相等

[ $a != $b ] //使用变量判断两个变量的值是否不相等

[ "$c" == $b ] //如果变量为空,有可能报错,加双引号可以避免

-z判断变量是否为空

[ -z $a ] //判断变量是否为空

echo $?

[ ! -z $a ] //判断变量是否非空

逻辑组合

&& //条件成功才执行后续指令

|| //条件失败才执行后续指令

当多个逻辑符号组合使用时

A && B //A、B任务都成功算成功

A || B //A、B任务有一个成功算成功

数字

-eq //是否相等

-ne //是否不等

-gt //是否大于

-ge //是否大于等于

-lt //是否小于

-le //是否小于等于

例子:

#!/bin/bash
x=`cat /etc/passwd | wc -l`
[ $x -gt 10 ]
echo "123"

文件

-e //判断文件是否存在,不关心类型

-f //判断文件是否存在

-d //判断目录是否存在

-r //判断当前用户对文件是否有读权限

-w //判断当前用户对文件是否有写权限

-x //判断当前用户对文件是否有执行权限

例子:

[ -d abc ] || mkdir abc              //判断是否存在abc目录,如果失败就创建abc

if分支

  1. 单分支

    例子:

    #!/bin/bash
    if [ $UID -ne 0 ];then
    echo "你不是管理员"
    fi
    
  2. 双分支

    例子:

    #!/bin/bash
    if [ $UID -ne 0 ];then
    echo "你不是管理员"
    else
    echo "你是管理员"
    fi
    

    判断一个地址通不通:

    #! /bin/bash
    ping -c 3 -i 0.2 -W 1 192.168.2.5 &> /dev/null
    #-c指定ping次数,-i指定每次ping的时间,-W表示当ping不通时多久返回结果
    if [ $? -eq 0 ];then
    echo "通了!"
    else
    echo "不通!"
    fi
    
  3. 多分支

    例子:

    #!/bin/bash
    read -p "猜数字游戏,请猜一个数字:" x
    if [ $x -eq 5 ];then
    echo "猜对了!"
    elif [ $x -gt 5 ];then
    echo "猜大了!"
    else
    echo "猜小了"
    fi
    

循环

for循环

例子:

#!/bin/bash
for i in {1..10}
do
echo $i
done

例子2:

#!/bin/bash
#ping测试,如果通x+1,不通则y+1
x=0
y=0
for i in {1..100}
do
ping -c 1 -i 0.2 -W 1 192.168.1.$i &> /dev/null
if [ $? -eq 0 ];then
echo "1.$i通了!"
let x++
else
echo "1.$i不通!"
let y++
fi
done
echo "通了$x台,不通$y台"

标签:bin,SHELL,变量,是否,echo,let,bash
来源: https://www.cnblogs.com/barry-zou/p/15705781.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有