Shell 笔记

shell 是什么?

用户与内核交互的接口,也是一种编程语言,解析性编程语言。

 

shell的两种执行方式:

1 ./hello.sh

2 sh ./hello.sh

 

shell中的变量:

系统变量:

$HOME、$PWD、$SHELL、$USER

用户自定义变量:

 

shell 单引号和双引号:

单引号:不转义

双引号:转义

 

将命令返回值赋给变量:

A=`ls -la`(反引号,1左边的)

A=$(ls -la)

 

shell中的特殊变量:

$$: 当前进程编号

$0: 当前脚本名称

$#: 表示参数个数,常用于循环

$? 表示上一个命令退出的状态

 

expr运算符:

分步计算:

S=`expr 2 + 3`

  expr $S \* 4

expr `expr 2 + 3 ` \* 4

 

for循环:

第一种:

for N in 1 2 3

do

  echo $N

done

 

第二种:

for ((i = 0; i <= 5; i++))

do

  echo "welcome $i times"

done

 

while循环:

第一种:

while expression

do

command

…

done



第二种:

i=1

while ((i<=3))

do

  echo $i

  let i++

done

 

case语句:

case $1 in

start)

echo "starting"

  ;;

stop)

echo "stoping"

  ;;

*)

  echo "Usage: {start|stop} “

esac

 

if判断:

判断条件:

= 字符串比较

-lt 小于

-le 小于等于

-eq 等于

-gt 大于

-ge 大于等于

-ne 不等于

if condition 

then 

    statements 

[elif condition 

    then statements. ..] 

[else 

    statements ] 

fi


例子:

#!/bin/bash

read -p "please input your name:" NAME

#printf '%s\n' $NAME

if [ $NAME = root ]

        then

                echo "hello ${NAME},  welcome !"

        elif [ $NAME = itcast ]
                then
                        echo "hello ${NAME},  welcome !"

        else

                echo "SB, get out here !"

fi

 

shell自定义函数:

 [ function ] funname [()]

{

    action;

    [return int;]

}

function start()  / function start / start()



栗子:

#!/bin/bash



function print(){

        echo $1 $2 $3

}

quit(){

        exit

}



print Hello World Again

print Tom



echo "foo"

quit

函数返回值,只能使用:“$?”

 

脚本调试:

•sh -vx helloWorld.sh

•或者在脚本中增加set -x

 

shell应用:

1. 读文件:

cat words.txt

 

2. 写文件:

echo "unpute you name"

read name

echo "hello, ${name}" >> words.txt

 

类似于不知道.sh文件怎么写,在命令行中先尝试,再写入shell。

对于顺序执行的文件,需要利用上一条执行结果,考虑"$?"。

参考gcc,gdb编译使用。

 

3.shell传参数

#!/bin/bash (使用/bin/bash下面来解释)

aa="hello"

echo "第一个参数:"$1

echo "第二个参数:"$2

 

 

sed命令:对文本处理-替换

数据:

10 tiny toes

this is that

5 funny 0

one two three

tree twice
# 部分替换:将第一个i替换为I

sed 's/i/I/' text.txt 

# 全部替换:将所有的t替换为T

sed 's/t/T/g' text.txt 

# 将this替换为that

sed 's/this/that/g' text.txt 

 

linux 数学计算:

bc <<< a + b

 

awk命令:文本处理-筛选

# 打印所有信息:

awk '{ print }' words.txt  == cat words.txt

# 按照空格区分第一列与第二列!!!

# 打印第一列信息:

awk '{ print $1 }' words.txt 

# 打印第一,二列信息:

awk '{ print $1, $2 }' words.txt 

# 打印包含hello字符的行

awk '/hello/ { print}' words.txt 

# 打印包含a-z的行

awk '/[a-z]/ {print }' words.txt 

# 打印包含0-9的行

awk '/[0-9]/ {print }' words.txt 

# 打印包含0-9开头的行

awk '/^[0-9]/ { print }' words.txt 

# 打印包含0-9结尾的行

awk '/[0-9]$/ { print }' words.txt 
条件筛选:

# 提取123 开头的行

awk '{ if($1 ~ /123/) print }' words.txt 

# 第二列0-9开头的行

awk '{ if($2 ~ /[0-9]/) print }' words.txt 
# -i Ignore case distinctions 忽略大小写的差异

grep -i test words.txt | awk '/[0-9]/ { print }'
数据:

Frank:Perez

Testing 1:Testing 2

Hello WOrld:Hi World

TesT:OMG

123 Testing:456 Testing

 

按照":"对数据分割

awk -F: '{ print $1 }' test.txt 

 

定时器:crontab

http://www.runoob.com/linux/linux-comm-crontab.html

crontab -e 编辑

crontab -l 显示

crontab -r 删除

 

定时执行一条命令:

# 分 时 (*/2 半分钟执行一次)

17 04 * * * echo "hello scala" >> /home/rand/hello.txt

 

你可能感兴趣的:(Shell,shell,脚本)