Shell

本文介绍了Shell脚本的基础知识,包括变量、算术运算、条件判断及循环控制等内容,并通过多个实用示例展示了如何使用这些知识来解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


强引用、弱引用

  • '' ""

-

[root@localhost Desktop]# echo "I have a $fruit"
I have a 
[root@localhost Desktop]# echo 'I have a $fruit'
I have a $fruit
[root@localhost Desktop]# echo Make \$\$ Fast\!
Make $$ Fast!
[root@localhost Desktop]# echo Make $$ Fast!
Make 4119 Fast!
[root@localhost Desktop]# echo #I have a banana#

[root@localhost Desktop]# echo \#I have a banana
#I have a banana
[root@localhost Desktop]# echo '#I have a banana'
#I have a banana
[root@localhost Desktop]# echo `pwd`
/root/Desktop
[root@localhost Desktop]# echo ' "Goodafternoon" '
 "Goodafternoon"

-

  • 变量

-

[root@localhost Desktop]# i=9
[root@localhost Desktop]# j=0
[root@localhost Desktop]# echo $i $j
9 0
父shell,子shell
[root@localhost Desktop]# bash
[root@localhost Desktop]# bash
[root@localhost Desktop]# bash
[root@localhost Desktop]# bash
[root@localhost Desktop]# exit
exit
[root@localhost Desktop]# exit
exit
[root@localhost Desktop]# exit
exit
[root@localhost Desktop]# exit
exit
[root@localhost Desktop]# exit
exit

-

算术运算符

 <value>++    赋值后增1    <value>--  赋值后减1
 -                  减法               +             加法
 **                 幂运算           *              乘法
 /                   除法              %            余数
 +=                加等              -=            减等
计算命令:$[],expr,let,(())

循环:

  • for do done
  • while do done

-

例子:1+2+...+100,数据库备份
vim 100.sh
#!/bin/bash
  for i in {1..100}
  do
  ((j+=i));
  echo $j
  done
chmod +x 100.sh
./100.sh
显示结果:
1
3
6
10
...
5050

-

vim mysql.sh
 #!/bin/bash
 for name in ` mysql -uroot -predhat -e "show databases;" -NE | grep -  E "^\*|^u|schema$" -v `
 do
 mysqldump -uroot -predhat $name > /mnt/${name}.dump
 echo "$name is ok."
 done

test条件判断:

  • 语法:test EXPRESSION 或[EXPRESSION]

-

[root@localhost Desktop]#[ -n westos ];echo $?
0
[root@localhost Desktop]#[ -z westos ];echo $?
1

字符串比较运算符:==、!=

[root@localhost Desktop]#[ abc=ABC ];echo $?
0
[root@localhost Desktop]#[ abc=ABC ];echo $?    
1
[root@localhost Desktop]#[ abc!=ABC ];echo $?
0

数字比较运算符

  • -eq 判断是否相等,相等返回0;
  • -ne 判断是否不等,别等返回0;
  • -lt 判断是否小于,小于返回0 ;
  • -le 判断是否小于等于,若小于等于为0;
  • -gt 判断是否大于,大于返回0;
  • -ge 判断是否大于等于,若大于等于返回0。

-

[root@localhost Desktop]#[ 1 -eq 1 ];echo $?
0
[root@localhost Desktop]#[ 1 -ne 1 ];echo $?
1
[root@localhost Desktop]#[ 1 -gt 2 ];echo $?
1

文件状态运算符

  • 语法: test -{-b|-c|-e|-f|-d|-L} filename|direcrtory
  • -b:判断是否为块设备
  • -c:判断是否为字符文件
  • -e:判断文件是否存在
  • -f:判断是否为普通文件
  • -d:判断是否是目录
  • -L:判断是否为链接文件(软连接)
  • 二进制文件运算符:-ef -nf -ot
  • 逻辑运算符:-o -a ! && ||

-

{ if;then fi }
{if ;then else fi}
{if ;then else if; then else if; then ... else fi}
case "$1" in
 );;
 );;
 );;
esac

-

简易一天倒计时:
#!/bin/bash
for ((hour=23;hour>=0;hour--))
do
    for ((min=59;min>0;min--))
    do
        for (( sec=59;sec>=0;sec--))
        do
        echo -ne "After ${hour}:${min}:${sec} is end."
        echo -ne "\r    \r"
        sleep 1
        done
    done
done

-

#!/bin/bash
for num in {1..30}
do
ping -c1 -w1 192.168.122.$num &>/dev/null
    while [ "$?" -eq "0" ]
    do
    echo 192.168.122.$num is up
    break 
    done
    while [ "$?" -ne "0" ]
    do
    echo 192.168.122.$num is down
    done
done

例子

  • 要求:一个文件包含用户名,一个文件包含密码,若是密码行数少于用户名,则用户对应不设置密码,不更改已存在用户密码,根据不同的情况进行判别。

-

#!/bin/bash
if [ -n "$1" -a  -n "$2" ]
then
    if [ -e "$1" -a  -e "$2" ]
    then
    lines=` wc -l $1 |cut -d " " -f 1 `
    echo $lines
    for num in $( seq 1 $lines )
    do
        username=`sed -n ${num}p $1`
        password=`sed -n ${num}p $2`
        ckuser=`getent passwd $username`
        [ -z "$ckuser" ]&&( useradd $username 
        echo $password |passwd --stdin $username )||(echo $username exist!)
    done    
        elif [ ! -e "$1" ]
    then 
        echo "The usrnamefile is not exit."
    else  
        echo "The passwordfile is not exit."
    fi
else
    echo "Need two files to create users(username and password)."
fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值