shell命令

变量

创建变量赋值
[root@moyue01 data]# name=zhang
[root@moyue01 data]# echo $name
zhang
#name为一个普通变量
#---------------------------------------------------------------
[root@moyue01 data]# set
#查看变量
colors=/root/.dircolors
name=zhang
varable=
#---------------------------------------------------------------
[root@moyue01 data]# unset name
#删除变量
[root@moyue01 data]# set
colors=/root/.dircolors
varable=
#---------------------------------------------------------------
只读变量
[root@moyue01 data]# readonly name
[root@moyue01 data]# name=li
-bash: name: 只读变量
只读变量不能更改只能查看
[root@moyue01 data]# echo name
name
只读变量不能删除下次开机时消失
[root@moyue01 data]# unset name
bash: unset: name: 无法反设定: 只读 variable
#---------------------------------------------------------------
环境变量
[root@moyue01 data]# bash
进入子程序
[root@moyue01 data]# echo $name

找不到变量
[root@moyue01 data]# exit
exit
退出子程序
[root@moyue01 data]# export name 
#转成环境变量
[root@moyue01 data]# export
declare -x ZOOKEEPER_HOME="/usr/local/zookeeper"
declare -rx name
declare -rx varable=""
可以查看有哪些环境变量
[root@moyue01 data]# bash
[root@moyue01 data]# echo $name
name
#---------------------------------------------------------------
位置变量
[root@moyue01 data]# vim demo.sh
#!/bin/bash
echo $0
echo $1
echo ${10}  
#注意!!!大于等于10需要用{}否则会当成$1和0进行拼接
[root@moyue01 data]# chmod 700 demo.sh
更改权限
[root@moyue01 data]# ./demo.sh 1 2 3 4 5 6 7 8 9 10 11
./demo.sh     #对应$0
1             #对应$1
10            #对应${10}
#---------------------------------------------------------------
特殊变量
[root@moyue01 data]# vim demo.sh
#!/bin/bash
echo $#
echo $*
echo $@ 
echo $$
echo $?
echo $!
[root@moyue01 data]# ./demo.sh 1 2 3 4 5 6
6                #对应$#显示参数个数
1 2 3 4 5 6      #对应$*显示所有参数(每个参数相互独立)
1 2 3 4 5 6      #对应$@显示所有参数(所有参数当成一个字符串)
49786            #对应$$显示当前进程的进程pid    
0                #对应$?显示上一次命令是否执行成功
                 #对应$!显示最后一次进程的pid

 三大常用指令

  • read
-p    #指定提示信息
[root@moyue01 data]# vim demo.sh
#!/bin/bash
read -p "输入账号:" user
read -p "输入密码:" passwd
echo "欢迎用户${user}登陆"
[root@moyue01 data]# ./demo.sh 
输入账号:zhang
输入密码:123
欢迎用户zhang登陆
#----------------------------------------------------------------
-n     限定字符长度
[root@moyue01 data]# vim demo.sh
#!/bin/bash
read -p "输入账号:" -n 2 user
read -p "输入密码:" passwd
echo "欢迎用户${user}登陆"
[root@moyue01 data]# ./demo.sh 
输入账号:zh输入密码:123
欢迎用户zh登陆
#达到两个字符后会自动回车
#----------------------------------------------------------------
-t     限定时间
[root@moyue01 data]# vim demo.sh
#!/bin/bash
read -p "输入账号:" -t 3 user
read -p "输入密码:" -t 3 passwd
echo "欢迎用户${user}登陆"s
[root@moyue01 data]# vim demo.sh 
[root@moyue01 data]# ./demo.sh 
输入账号az输入密码123欢迎用户登陆
#时间到了没用回车就没用赋值
-t     限定时间
#----------------------------------------------------------------
[root@moyue01 data]# vim demo.sh
#!/bin/bash
read -p "输入账号:" -s user
read -p "输入密码:" -s passwd
echo "欢迎用户${user}登陆"s
[root@moyue01 data]# vim demo.sh 
[root@moyue01 data]# ./demo.sh 
输入账号:
输入密码:
欢迎用户zhang登陆
#隐藏账号密码
  • expr
用于计算
[root@moyue01 data]# int1=1
[root@moyue01 data]# int2=2
[root@moyue01 data]# echo ` expr $int1 + $int2 `
3
[root@moyue01 data]# echo $(expr $int1 + $int2)
3
[root@moyue01 data]# echo $(expr $int1 -  $int2)
-1
[root@moyue01 data]# echo $(expr $int1 \*  $int2)
2
[root@moyue01 data]# echo $(expr $int1 \/  $int2)
0
[root@moyue01 data]# echo $(expr $int1 \%  $int2)
1
  • test
一般不使用
(())更为简单
-a等价于&&
-o等价于||
i等价于!
整数
[ $a -eq $b ]判断是否相等
[ $a -ne $b ]判断是否不相等
[ $a -gt $b ]判断$a是否大于$b
[ $a -it $b ]判断$a是否小于$b
[ $a -ge $b ]判断$a是否大于等于$b
[ $a -le $b ]判断$a是否小于等于$b
字符串
-z检测是否为空
-n检验是否不为空
string1 == string2 检验string1是否等于string2
string1 != string2 建议string1是否不等于string2

字符串

单引号
单引号内所有的字符都没有意义
双引号
双引号可以配合变量使用
字符长度
    #
[root@moyue01 data]# echo $name     #这里没用变量name长度为0

[root@moyue01 data]# echo ${#name}
0
[root@moyue01 data]# age=19
[root@moyue01 data]# echo ${#age}
2
    length
[root@moyue01 data]# age=19
[root@moyue01 data]# echo length ${age}
2
#-----------------------------------------------------------------------
截取
[root@moyue01 data]# age=19
[root@moyue01 data]# echo ${age:1}
9
从下标1开始截取
[root@moyue01 data]# name=zhangsan
[root@moyue01 data]# name=zhangsan
[root@moyue01 data]# echo ${name:2:2}
an
从下标2开始截取2个
[root@moyue01 data]# echo ${name:0-3:2}
sa
从倒数第三个开始截取2个

数组

只有一维数组且没用长度限制
varable=(value1 value2 value3 ~)
[root@moyue01 data]# vim demo.sh
#!/bin/bash
varable=(1 2 3)
echo ${varable[0]}
echo ${varable[1]}
echo ${varable[2]}
echo ${varable[*]}
echo ${varable[@]}
echo ${varable[-1]}
[root@moyue01 data]# ./demo.sh 
1
2
3
1 2 3    #多个字符
1 2 3    #当成一个字符串
3        #倒数第一个元素

分支循环

  • if分支
if [ 条件 ] ; then
    逻辑体
fi
[root@moyue01 data]# vim stu.sh
#!/bin/bash
if [ $1 == 2 ] ;then
        echo "$1"
fi
[root@moyue01 data]# ./stu.sh 2
2
#---------------------------------------------------------------------------
else写法
if [ 条件 ] ; then
    逻辑体
else
    逻辑体
fi
[root@moyue01 data]# vim stu.sh
#!/bin/bash
if [ $1 == 2 ] ;then
        echo "$1"
else
        echo "参数错误"
fi
[root@moyue01 data]# ./stu.sh 1
参数错误
#---------------------------------------------------------------------------
elif写法
if [ 条件 ] ; then
    逻辑体
elif [ 条件 ] ; then
    逻辑体
else 
    逻辑体
fi
[root@moyue01 data]# vim stu.sh
#!/bin/bash
if [ $1 == 2 ] ; then
        echo "$1"
elif [ $1 == 3 ] ; then
        echo "$1"
else
        echo "参数错误"
fi
[root@moyue01 data]# ./stu.sh 3
3
  • case分支
case ... in
value1)
    逻辑体
;;
value2)
    逻辑体
;;
*)
    逻辑体
;;
esac
#!/bin/bash
case $1 in
1|2|3|4|5)
        echo "${1}在[1,5]内"
;;
6|7|8|9|10)
        echo "${1}在[6,10]内"
;;
*)
        echo "不在范围"
esac
[root@moyue01 data]# ./stu.sh 6
6在[6,10]内
  • while
while [ 条件 ]
do
    逻辑体
done
#-----------------------------------------------------------------------------
#!/bin/bash
read -p "输入次数" i
while (( $i > 0 ))
do
        echo "$i"
        let i--
done
[root@moyue01 data]# ./stu.sh
输入次数3
3
2
1
  • until
until [ 条件 ]
do
    逻辑体
done
[root@moyue01 data]# vim stu.sh
#!/bin/bash
read -p "输入密码" passwd
sum=1
until [ $passwd == "123456" ]
do
        read -p "请从新输入:" passwd
        if [ $sum == 2 ];then
        break
        fi
        let sum++
done
[root@moyue01 data]# ./stu.sh
输入密码123
请从新输入:123
请从新输入:123
  • for
for循环
for 变量 in 列表
do   
    执行逻辑
done
[root@moyue01 data]# vim stu.sh
#!/bin/bash
sum=0
echo "素数:1"
echo "素数:2"
for (( x = 2 ; x <= 1000 ; x++ ))
do
        for ((y = 2 ; y < x ; y++))
        do
         if ((x % y == 0));then
        sum=0
                break
        else
        sum=1
        fi
        done
        if ((sum==1));then
        echo "素数:"$x
        fi
done
[root@moyue01 data]# ./stu.sh
素数:1
素数:2
素数:3
素数:5
素数:7
  • select
列表的选择
select varable in 列表
do
    
done
[root@moyue01 data]# vim stu.sh
#!/bin/bash
select var in monday tuesday wenseday
do
        echo "your option is"$var
        if [ $var == "tuesday" ];then
        break
        fi
done
[root@moyue01 data]# ./stu.sh 
1) monday
2) tuesday
3) wenseday
#? 1
your option ismonday
  • shift
shift一次数据向前移
until [条件]
do
    逻辑体
done
[root@moyue01 data]# vim stu.sh 
#!/bin/bash
sum=0
until [ "$1" == "" ]
do
        sum=`expr $sum + $1 `
        shift
done
echo "sum:${sum}"
[root@moyue01 data]# ./stu.sh 1 2 3 4 5 6 7 8 9
sum:45
  • 函数
定义函数
[function] funcname (){
函数体
}
funcname可以调用
[root@moyue01 data]# vim stu.sh
#!/bin/bash
function funcname(){
echo "张三"
}
funcname
[root@moyue01 data]# . stu.sh 
张三

脚本引入

. 文件名|source 文件名
[root@moyue01 data]# vim stu.sh
#!/bin/bash
function funcname(){
echo "张三"
}
funcname
[root@moyue01 data]# . stu.sh
[root@moyue01 data]# funcname
张三

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值