shell基础

运行脚本:

1)
chmod +x first.sh
./first.sh
2)
sh first.sh
3)
source first.sh

管道 |

find /etc -name "*.conf" -type f

计算结果数
find /etc -name "*.conf" -type f | wc -l

ps aux | grep httpd

重定向 输入:< 输出:> »

标准错误输出:2> 2>> 将错误信息覆盖,追加到指定文件
混合输出: &> &>> 将标准输出和错误信息覆盖,追加到指定文件

uname -r > version.txt
cat version.txt version1.txt 2> error.txt

逻辑 逻辑与:&& 逻辑或:|| 顺序执行:;(分号)

echo "jack" && echo "tom"
jack
tom
echo "jack" || echo "tom"
jack

#判断创建文件夹是否成功
mkdir test 2>/dev/null && echo "success"
success
mkdir test 2>/dev/null || echo "fail"
fail


cd ../2 ; ls

变量

变量基本操作
    定义变量:变量名=变量值
    引用变量:$变量名、${变量名}
双引号
    允许引用、\转义
单引号
    禁止引用、\转义
反撇号、或者$()
    以命令输出进行替换
    var=`uname -r`
    echo $var
常见的环境变量
    系统赋值:USER、LOGNAME、HOME、SHELL
    用户操作:PATH,LANG、CLASSPATH

    echo $USER $HOME SHELL
    holmes /home/holmes SHELL
特殊变量
    $?:返回前一条命令的执行状态值,为0表示执行成功
    $0:脚本自身的程序名
    $1-$9:参数
    $*:所有参数
    $#:参数个数

数值运算和处理

整数运算操作 op:+-*%/
    expr命令:expr var1 op var2
        expr 45 + 21
        expr 4 \* 5
    $[]:$[var1 op var2]
        echo $[45+21]
        echo $[45*3]
        x=5;y=4;echo $[x-y]
数值处理
    递更处理:let var++、let var--
        x=45;y=21
        let x++;echo $x
    随机数:RANDOM
        echo $RANDOM
        echo $[RANDOM%100]
    seq first end、seq first addnum end
        seq 3:1 2 3
        seq 3 5:3 4 5
        seq 3 2 10:3 5 7 9
小数运算操作
    bc命令:
        echo "45.67-21.05"|bc
            24.62
        echo "scale=4;10/3"|bc
            3.3333

字符串处理

截取
    var1="/etc/httpd/conf/httpd.conf"
    dirname命令:dirname $var1
        /etc/httpd/conf
    basename命令:basename $var1
        httpd.conf
    expr命令:expr substr $var1 begin length(begin从1开始数)
        var1=beidaqingniao
        expr substr $var1 4 6
        daqing
    ${}表达式:${var1:begin:length}(beign从0开始数,begin可以省略)
        var1=beidaqingniao
        echo ${var1:4:6}
        aqingn
        echo ${var::5}
        beida
替换
    ${}:
        ${var1/old/new}
        ${var1//old/new}
        var1="testaaatestabc"
        echo ${var1/a/#}
        echo ${var1//a/#}
随机字符串
    生成随机字符串
    head -1 /dev/urandom|md5sum
    截取字符串
    echo $var1|cut -b begin-end(begin,end均可省略)
    head -1 /dev/urandom|md5sum|cut -b -8

条件测试

操作规范
    test 条件表达式

    [ 条件表达式 ]
        [ -d "/etc/grub" ] && echo "yes"
文件状态
    -e,-d,-f:
        [ -d "/etc/grub" ] && echo "yes"
    -r,-w,-x
        [ -r "/etc/shadow" ] && echo "yes"
数值、字符串比较

    数值比较:-eq,-ne,-gt,-lt,-ge,-le
        [ $(who|wc -l) -eq 3 ] && echo yes
    字符串:=、!=
    [ $USER = "root" ] && echo yes

if判断
for语句

格式:
    for var in 取值列表
    do
        命令
    done
#################################
#!/bin/sh
for i in $(cat /root/users.txt)
do
    useradd $i
    echo "123456" | passwd ==stdio $i
    chage -d 0 $i
done
#################################

#!/bin/sh
IP_PRE="192.168.1."
for IP in $(seq 1 5)
do
    ping -c 3 -i 0.2 -W 3 $[IP_PRE]$IP &>/dev/null
    if[ $? -eq 0 ];then
        echo "$[IP_PRE]$IP is up"
    else
        echo "$[IP_PRE]$IP is down"
    fi
done
####################################

case分支

格式:
    case var1 in
    case1)
        命令序列
    ;;
    case2)
        命令序列
    ;;
    case3)
        命令序列
    ;;
    ....
    ;;
    *)
        默认命令序列
    esac
########################################
#!/bin/sh
read -p "please input a word" KEY
case "$KEY" in
    [a-z][A-Z])
        echo "你输入了一个字母"
    ;;
    [0-9])
        echo "你输入了一个数字"
    ;;
    *)
        echo "你输入的不是数字也不是字母"
esac

你可能感兴趣的:(linux,shell)