十五. shell

发布于:2024-03-29 ⋅ 阅读:(16) ⋅ 点赞:(0)

十五. shell

shell解释型语言 xx.sh xx.py php 需要解释器来执行,运行效率低,开发效率高。

通常用于服务器配置等。

编译型 先编译后执行 xx.c ->二进制可执行 xx.exe 运行效率高,开发效率低。

python 解释型 python.exe 2.xx 3.xx 2和3语法不兼容。

xx.java javac编译器-》class文件(二进制)-》java解释器(java虚拟机)java.exe

#my.sh
#!/usr/bin/bash #用于bash来解析
echo "hello"
exit
bash my.sh #bash来执行
chomd u+x my.sh #增加权限,否则./my.sh执行不了 没有x权限
./my.sh #bash来执行

语法

打印和取值

#变量 本地,环境,参数
#a = 10//不能编译通过,因为=后面的空格算a的内容
#!/usr/bin/bash
a=10
b=hello
d="$a"#可以取a的值
d='$a'#原样输出
echo "a=$a"#$为取值
echo "b=$b"
echo "d=$d"

计算和读取数据

#let计算 read从键盘读取读取
#!/usr/bin/bash
echo "input"
read line#从键盘读取数据
echo "line=$line"
let "a+=1"#a+=1
echo "a=$a"

变量

MYSTR="hello zhangxuan"//本地变量
export MYSTR//将本地变量增加到环境变量
#!/usr/bin/bash
echo "path=$PATH"#从系统中获取的变量,环境变量
echo "MYSTR=$MYSTR"
#参数变量
echo "$$"#bash脚本的pid
./my.sh hello abc 123
echo "$#"#参数的个数
echo "$0"#第一个参数
echo "$1"#第二个参数
echo "$2"#第三个参数

条件

#!/usr/bin/bash #使用bash解释器
string = string1 #如果两个字符串相同为真
string != string2 #如果两个字符传不同则为真
-n string #如果字符串不为空则真
-z string #如果字符串为null则为真
read line

if [ "$line" = "hello" ]#中括号两边必须有空格
then echo "yes"
fi 

if [ "$line" -ge 0 ] && [ "$line" -lt 10]
then echo "yes"
else echo "no"
fi
# 与&& 或|| 非! -ge大于 -lt小于 -eq等于

if [ -d "$line" ]#目录
then echo "$line is mulu"
elif [ -f "$line" ]#普通文件
then echo "$line is file"
else echo "not find"
fi

read line
case "$line" in
	[Yy][eE][Ss]|[Yy]) echo "this is yes";;
	no|n) echo "this is no";;
	end) break;;
	*) echo "***";;
esac

循环

#! /sur/bin/bash
#打印1 2 3
for i in 1 2 3
do
	echo i=$i
	sleep 2
done

for i in $(ls)
do 
	echo "i=$i"
done
# $() 或 ``反引号 即将里面的内容当命令处理,而不是当字符串处理
#while [ 1 = 1 ]
#while [ : ]
#while echo "hello"
while true
do
	echo "run"
	sleep 1
done

while [ $i -lt 10 ]
do 
	echo "i=&i"
done

until [ -f a.txt ]#与while取反
do 
	echo "not find a.txt"
	sleep 1
done

计算

#!usr/bin/bash
i=1
i=`expr $i+3`
#`expr内容`
#\* 乘法

函数

fun(){
 echo "fun run"
 res=10
 local ppp=20#只能在函数内使用
}
fun sb liuduoduo
echo "res=$res"
echo "ppp=$ppp"
unset res#移除res,否则永远不消失
#$?代表上一个语句的执行结果
#通过参数来给值
#通过 $1 $2来取值

脚本调用

#!usr/bin/bash
./b.sh#新建进程bash来执行b.sh
. ./b.sh #以“. ”命令执行,即用现在的解释器来解释
source ./b.sh #与上述等价

c语言调用脚本

#include <stdli.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main(){
	printf("%d",getpid());
	excel("./d.sh","d.sh",(char *)0);
	exit(0);
}
//通过excel替换进行

awk

#awk用来分隔字符串
#-F后跟的分隔符
#print为命令 $0为全部列 $n为第n列
#file为要分割的文件
#newfile为新的文件
#>为重定向符
#{}内为语句
#BEGIN和END为开始和结尾进行的语句
awk -F. 'BEGIN{print "name\tuid\n--------"}{if ($3 >= 20) print $1,$3}END{print "end-----"}' file > newfile
#将file中通过.来分割的第一列打印到newfile文件中

sed

#sed控制文件内容
sed '2a\3.3' file > newfile
#第二行后面加一行 内容为3.3
sed '1,3a\-----' file > newfile
#从第一行到第三行后面插入-----
sed '2d' dile > newfile
sed '2,3p' file>newfile
#将2,3行打印到newfile
sed '2s/4/5'file > newfile
#将第二行的4替换成5

grep

#grep 筛选文件内容
ps -ef|grep sleep#打印有sleep的
ps -ef|grep -v sleep#打印没有sleep的
ps -ef|grep -c sleep#显示sleep的行号
本文含有隐藏内容,请 开通VIP 后查看