shell综合

参考 : 

        ​​​​​​shell实例练习+详解 - 999.感冒灵 - 博客园                    
        Shell 教程 | 菜鸟教程

1.变量

1.1.pwd 赋值给变量

temp=$(pwd)

参考 : pwd结果保存到变量_qhexin的专栏-CSDN博客_pwd变量

2.运算符

2.1.算数运算符

* 运算符需要转义,需在 * 前加 \ ;

运算符前后需加空格;

2.2.逻辑运算符

大于

cat > test.sh << 'EOF'
a=11
if [ $a -gt 10 ]; then
    echo "a大于10"
else
    echo "a不大于10"
fi

EOF

大于 -gt (greater than)
小于 -lt (less than)
大于或等于 -ge (greater than or equal)
小于或等于 -le (less than or equal)
不相等 -ne (not equal)

3.流程控制

3.1.if else

if 条件之后 then 之前需换行;

3.2.判断前一个命令是否运行成功

if [ $? -eq 0 ]; then
    echo "success"
else
    echo "fail"
fi

参考 : shell中判断前一个命令是否执行成功 - 斜月三星一太阳 - 博客园

3.2.判断变量是否为空

参考 : https://blog.csdn.net/weixin_43810067/article/details/124113759

base

[ -z "$var" ] && echo "Empty"

OR 

[[ ! -z "$var" ]] && echo "Not empty" || echo "Empty"

base shell

为空

if [ -z "$var" ]
then
      echo "\$var is empty"
else
      echo "\$var is NOT empty"
fi

不为空

if [ ! -z "$var" ]
then
      echo "\$var is NOT empty"
else
      echo "\$var is empty"
fi

4.文件

4.1.判断文件是否存在,存在则删除

if [ ! -f "/data/filename" ];then
echo "文件不存在"
else
rm -f /data/filename
fi

4.2.获取指定路径所有文件名

参考 :Shell(Bash)编程实例之获取某个文件夹下的所有文件名(含文件夹)_立身以力学为先,力学以读书为本。 —郑耕老《劝学》-CSDN博客_shell获取文件夹下所有文件名

4.3.shell 提取文件名和目录名

参考 : shell 提取文件名和目录名_小耗子的博客-CSDN博客_bash 文件名

4.4.筛选文件夹

参考 : linux中5种方法过滤出文件夹ls -F ls -p grep、find快速查找过滤目录 - 感谢蛋炒饭 - 博客园

 ls -l | grep "^d"
ls -F | grep '/$'
ls -l |awk '{if($2>1) print $0}'

4.5.shell获取本身目录


path="$( cd "$( dirname "$0"  )" && pwd  )"

5.进程 

5.1.使用Shell脚本查找程序对应的进程ID,并杀死进程

参考 : 使用Shell脚本查找程序对应的进程ID,并杀死进程_Learning-CSDN博客_shell查找进程并杀掉

#!/bin/sh
 
NAME=$1
echo $NAME
ID=`ps -ef | grep "$NAME" | grep -v "grep" | awk '{print $2}'`
echo $ID
echo "---------------"
for id in $ID
do
kill -9 $id
echo "killed $id"
done
echo "---------------"

$1 为执行shell脚本的第一个参数

6.字符串

6.1.切割字符串

参考 : 【shell】shell字符串分割|文件分割|剪切|截取_bandaoyu的博客-CSDN博客_shell分割字符串

cat >test.sh<<'EOF'
#!/bin/bash

# 参数1: 要切割的字符串
# 参数2: 切割符
# 参数3: 切割后返回指定下标元素
function split(){
	#保存当前shell默认的分割符,一会要恢复回去
	OLD_IFS="$IFS" 
	#将shell的分割符号改为第二个参数 
	IFS=$2          
	#分割符是第二个参数,根据第二个参数切割第一个参数        
	array=($1)     
	#恢复shell默认分割符配置
	IFS="$OLD_IFS"  
	echo ${array[$3]}
}

str="1=2=3=4"
split_result=`split $str = 2`
echo $split_result
EOF

7.数组

参考 : shell中数组的定义方法_芒果布丁啊的博客-CSDN博客_shell定义数组

7.1.定义数组

array=(a b c)

下标从0开始 

7.2.打印数组

array=(a b c)
for var in ${array[@]}
do
   echo $var
done 

7.3.打印数组第2个元素

echo ${array[1]}

7.4.打印数组长度

arr=(1 2 3 4)
echo ${#arr[*]}

7.5.直接打印数组

arr=(1 2 3 4)
echo ${arr[*]}

8.结果处理

8.1.输出第一列

date | awk '{print $1}'

8.2.输出前五行

ll / | head -5

8.3.输入指定列并拼接字符串

date|awk '{print $1"-"$2"-"$3"-"$4"-"$5}'

8.4.替换

2替换成4(命令行)

echo 123 |sed 's#2#4#g'

注 : #可以为其他字符,如 /  ,  .

2替换成4(shell脚本)

a=1223
s=${a//2/"4"}
echo $s

8.5.包含

参考 : grep怎样使用与(and) 或(or) 非(not)命令_jingwen3699的博客-CSDN博客_grep 非

包含(and)

cat 1.txt |grep a|grep b

包含(or) 

cat 1.txt |grep -E "a|b"

不包含

cat 1.txt |grep -v "a"

9.函数

9.1.调用函数

注意 : 

  1. 函数内部通过echo返回结果,函数内部所有的echo都会返回
  2. 函数返回值赋值通过``赋值
  3. 通过函数赋值可以拿到返回结果,但是函数内部修改全局变量不生效,只有单独执行该函数才会生效
cat > test.sh << 'EOF'
b=0
function test(){
    echo "xxx"
    b=1
}

echo $b
rs=`test`
echo $rs
echo $b
echo "----"
echo $b
test
echo $b

EOF

10.遍历命令结果

cat > run.sh <<'EOF'
#!/bin/sh
for a in $(env)
do
	echo $a
	
done
EOF

sh run.sh

11.参数

cat > t.sh <<'EOF'
#!/bin/bash

total=$#
array=($*)

echo "参数长度: [$total]"
echo "所有参数: [$*]"
echo "所有参数: [${array[*]}]"

echo "打印参数和下标:----------------"
for ((i=1;i<=$total;i++));
do
    echo "    传递参数位:$i 对应值:${array[$i-1]}"
done
EOF


sh t.sh a b 1 3


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值