Shell编程

创建sh文件

touch test.sh
vim test.sh

写入如下内容
    #!/bin/bash
    a="hello"

运行
    chmod +x /root/test.sh
    . ./test.sh
    echo $a

可以运行unset撤销变量

export可以设置全局变量

系统变量

set 查看系统变量

常见的系统变量
    echo $HOME                  /root
    echo $PWD                   /root
    echo $SHELL                 /bin/bash
    echo $USER                  root

其他常用变量
    echo $?                     返回上一条语句的返回值,0表示执行成功
    echo $$                     当前进程号
    echo $0                     当前脚本名
    echo $n                     获取运行脚本传递的第n个参数
    echo $#                     传递参数的个数
    echo $*                     表示参数列表,如果使用引号包裹输出整体
    echo $@                     表示参数列表,如果使用引号包裹输出还是列表

for item in $@
do
echo $item
done

./test.sh 1 2 3 4 5

单引号和双引号的区别

echo "Hi, $a"                   Hi, hello
echo 'Hi, $a'                   Hi, $a

算术表达式

res=`expr 1 + 2`

循环

for循环
    for item in 1 2 3
    do
    echo $item
    done

while循环
    item=1
    while((item<=3))
    do
        echo $item
        let item++
    done

case语句
    case $1 in 
    a)
        echo "aaa"
        ;;
    b)
        echo "bbb"
        ;;
    *)
        echo "(a|b)"
    esac
    运行./test.sh a 输出 aaa

read

read -p "input a number" num
echo $num

if

if [ $1=a ]
then
    echo "aaa"
elif [ $1=b ]    
then
    echo "bbb"
else
    echo "--------"
fi

数值条件判断
    =           等于
    -lt         小于
    -le         小于等于
    -ep         等于
    -gt         大于
    -ge         大于等于
    -ne         不等于

文件条件判断
    -f test.sh  判断文件是否存在
    其他的判断符
        -r      是否读权限
        -w      是否写权限
        -x      是否执行权限
        -f      是否存在
        -s      是否存在且不为空
        -d      是否存在并且是目录

函数

function fn()
{
    echo $1, $2;
    return $(($1+$2));
}

fn 1 2;
echo $?;

cut

文本分割操作

a='a|a|c|d'
echo $a | cut -d '|' -f 2                       输出结果 b

sort

排序操作

echo $a | sort -t '|' -k 2                      按照第2列字符串排序
echo $a | sort -t '|' -k 2 -u                   按照第2列字符串排序,去重
echo $a | sort -t '|' -k 2n                     按照第2列数字排序
echo $a | sort -t '|' -k 2nr                    按照第2列数字倒序排序

cat file | sort | uniq

sed

sed -i '1d' file                                删除文件的第一行
sed -i '1,$d' file                              删除文件的所有行
sed -i '$d' file                                删除文件的最后一行
sed -i '/aaa/'d file                            删除文件中包含aaa的行
sed -i 's/aaa/bbb/g' file                       将所有的aaa替换成bbb

awk

echo $a | awk -F "|" '{print $1}'               输出分割的第一列

相关文章:

  • 2021-12-28
  • 2021-07-14
  • 2021-12-23
  • 2022-01-01
  • 2022-02-11
猜你喜欢
  • 2022-12-23
  • 2021-10-19
  • 2022-12-23
  • 2021-09-02
  • 2021-09-23
  • 2021-07-25
  • 2021-12-07
相关资源
相似解决方案