shell编程基础

定义:shell编程是使用linux命令来进行写程序的语言

脚本语言:写linux里执行命令的脚本

脚本就是一个文件,里面有很多的linux命令+if+for+case+while等流控语言

shell脚本执行顺序是从上而下,一条一条的执行,如果某条命令执行出错,后面的命令是否执行呢?
答案: 执行

((  整数的运算和比较 ))
[[  字符串的比较  ]]

1.变量 variable

为什么需要变量?----传递信息、数据

变量是临时存放数据的一个容器

  • 变量的定义,=左右不能有空格

[root@localhost shell]# sg="xiaowei"
[root@localhost shell]# bsg="caojb"
[root@localhost shell]# ssg = "xiaoniu"

  • 引用变量的值  ——$接变量名,就是引用这个变量的值

[root@localhost shell]# echo $sg  $ssg $bsg $mn
xiaowei caojb

注:shell编程里变量如果没有定义直接使用,默认是空值,不会报错,可以直接使用

[root@localhost shell]# mkdir  $sg
[root@localhost shell]# ls
first.sh  xiaowei

[root@localhost shell]# echo $sg1

[root@localhost shell]# echo ${sg}1
xiaowei1
[root@localhost shell]# 
{} 避免变量的混淆,给变量划定了边界

  • 变量的命名 

变量的名字里不能出现特殊符号
①下划线命名法  -->使用非常多
        user_name="feng"
②区分大小写
③驼峰命名法
        UserName="feng"
        userName="feng"

[root@localhost shell]# UserName="fengdeyong"
[root@localhost shell]# echo $UserName
fengdeyong
[root@localhost shell]# 
变量的命名不能以数字开头,包含特殊字符
[root@localhost shell]# 6sg="gaohui"
-bash: 6sg=gaohui: 未找到命令
[root@localhost shell]# sg6="gaohui"
[root@localhost shell]# sg>="gaohui"
用法:sg 组 [[-c] 命令]

2.流控语句:流程控制

  • if语句

①单分支

条件为真,就执行命令

条件可以是一条命令

if  条件 ;then
    命令
fi

;  命令连接符号  
命令1  ;  命令2  先执行命令1然后执行命令2  ,在一行里可以执行多条命令,不管前面的命令执行是否成功都会执行后面的命令
[root@localhost shell]# mkdir echo yes;echo no
yes
no

②双分支

if  条件 ;then
    命令1
else
    命令2
fi

③多分支

if  条件1 ;then
    命令1
else if 条件2;then
    命令2
else if 条件3;then
    命令3
else
    命令4
fi

拓展:$? 代表上一条命令的返回值 
             0 代表上一条命令执行成功
          非0 代表上一条命令执行失败

[root@localhost shell]# fjdkjfdjkfdj
-bash: fjdkjfdjkfdj: 未找到命令
[root@localhost shell]# echo $?
127
[root@localhost shell]# ls
first.sh  =gaohui  xiaowei
[root@localhost shell]# echo $?
0

[[ ]] 进行字符串的比较
(( )) 数值的比较 ,只能用于整数的比较,不能进行小数的比较

[root@localhost shell]# a=10
[root@localhost shell]# b=20
[root@localhost shell]# (($b > $a))
[root@localhost shell]# echo $?
0
[root@localhost shell]# (($a > $b))
[root@localhost shell]# echo $?
1

[root@localhost shell]# (($b >10 && $b<100))
[root@localhost shell]# echo $?
0
[root@localhost shell]# (($b >50 && $b<100))
[root@localhost shell]# echo $?
1

[root@localhost shell]# cat if.sh 
#!/bin/bash
#接受用户的输入
read  -p "请输入用户名:"  user_name

if [[ $user_name == "root" ]];then
        echo "你是管理员root"
elif [[  $user_name == "admin" ]];then
        echo "你是管理员admin"
elif [[ $user_name == "sg" ]];then
        echo "你是帅哥sg"
else
        echo "你是一个普通的用户"
fi

[root@localhost shell]# bash if.sh 
请输入用户名:root
你是管理员root
[root@localhost shell]# bash if.sh 
请输入用户名:admin
你是管理员admin
[root@localhost shell]# bash if.sh 
请输入用户名:sc
你是一个普通的用户

  • for循环

for  变量   in  集合
do
    命令
done

案例:

#!/bin/bash

for  i  in {1..10}
do
        mkdir  /shell/machi$i
done

break :跳出整个循环,执行循环后面的语句
continue : 结束本次循环,不再执行后面的语句,开始下一次循环

#!/bin/bash
for  i  in {1..10}
do
    if (( $i == 6 ));then
        touch wuyangming$i.txt
        continue
    fi
    mkdir -p  /shell/wuyangming$i
done

#!/bin/bash
for  i  in {1..10}
do
    if (( $i == 6 ));then
        touch renxiaojing$i.txt
        #continue
        break
    fi
    mkdir -p  /shell/renxiaojing$i
done

mkdir  /shell/renxj_end

双重for循环

#!/bin/bash

for  i  in {1..10}
do
    for a in {1..5}
    do
        echo  "$i $a"
    done
done

控制循环次数的案例:

#!/bin/bash
i=1
while (( $i <= 10))
do
    echo $i
    ((i++))
done

#!/bin/bash
i=1
#while true
while :
do
        echo $i
        ((i++))
        #暂停1秒
        sleep 1
done

--------------

练习:

1.使用while死循环,当i=10的时候退出 整个循环

[root@localhost shell]# cat while3.sh
    #!/bin/bash

    i=1
    while true
    do
        echo $i
        ((i++))
        sleep 1
        if((i==10));then
        break
        fi
    done

[root@localhost shell]# 

2.使用for循环编写一个九九乘法表

[root@localhost shell]# cat for3.sh
    #!/bin/bash

    for ((i=1;i<=9;i++))
    do
        for ((a=1;a<=i;a++))
        do    
            echo -n "$i*$a=$[i*a]  "
        done
        echo 
    done

拓展:

for ((i=1;i<=9;i++))  --》类似于c语言的写法
for i in {1..9}   --》非常shell的写法

echo -n "$i*$a=$[i*a]  "
echo -n "$i*$a=$((i*a)) "
在双圆括号里,变量可以不接$符号

3.位置变量

给脚本传递参数

[root@server ~]# cat pos_var.sh 
#!/bin/bash

echo  "第1个位置变量是 $1"
echo  "第2个位置变量是 $2"
echo  "第3个位置变量是 $3"
echo  "第4个位置变量是 $4"
echo  "第5个位置变量是 $5"
echo "一共有 $# 个位置变量"
echo "所有的位置变量的内容是 $*"
[root@server ~]# bash  pos_var.sh   panlinfeng  zhenyani  machi  gaohui  xiaowei liquan
第1个位置变量是 panlinfeng
第2个位置变量是 zhenyani
第3个位置变量是 machi
第4个位置变量是 gaohui
第5个位置变量是 xiaowei
一共有 6 个位置变量
所有的位置变量的内容是 panlinfeng zhenyani machi gaohui xiaowei liquan

脚本里面命令行模式:

:%s/sc/username/g    

% 代表所有的行
s 替换操作  substitute
/sc/username/
old word    new word
g  一行里有多个都替换  global

sc1  sc2  sc3
username1  username2  username3

4.数组 Array

声明:

数组名=(参数1 参数2 参数3 ...)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值