shell基础(一)

发布于 / Linux / 0 条评论

1.变量

#!/bin/bash    说明这是个shell脚本
#Filename : first_shell.sh   
#auto echo hello world
#by authors lindong
echo "hello world"


#!/bin/bash
#define path vaiables
#by authors lindong
A=123
echo "${A}"
echo $UID	# 当前用户		
echo $PWD   # 当前目录
echo "######################################"
echo $0       # 文件名称
echo $1 $2    # 打印第一个第二个变量(通过命令行传入)
echo "++++++++++++++++++++++++++++++"
echo "the \$? is $?"        # 判断上一条命令是否正确
echo "the \$* is $*"		# 展示所有变量
echo "the \$# is $#"        # 统计变量个数


#!/bin/bash
# lamp.sh   待完善
echo "please select Mean follow:"
echo "1)安装apache服务器"
echo "2)安装mysql服务器"
echo "3)安装php服务器"
echo "4)安装lamp web服务器"
echo "--------------------------"

2. if条件语句

#!/bin/bash

NUM=100
if(($NUM>4));then     # 两个括号用于比较
	echo "the num is ${NUM} greater than 4"
fi


-f 判断文件是否存在
-d 判断目录是否存在			if [ -d dir ]
-z 空字符串
-a 相当于 与
-o 相当于 或


#!/bin/bash
#by authors lindong
if [ -d /home/lindong ];then
	echo "目录已经存在"
else
	echo "目录不存在"
fi



#!/bin/bash
FILE=/home/lindong/file.txt
if [ ! -f $FILE ];then    
	echo "ok" >> $FILE    # 创建文件并且写进去
else
	cat $FILE
fi;


#!/bin/bash
score=80
if (($score>80));then
	echo "good"
elif (($score>70));then
	echo "litte good"
else
	echo "laji"
fi

3.for语句

#!/bin/bash
for i in `seq 1 15`       # 打印1-15
do
	echo "$i"
done

for i in echo 1 2 3 4 5   # 索引的另外一种方式
do
	echo $i
done


# 求和
#!/bin/bash
j=0
for ((i=1;i<=100;i++))
do	
	j=`expr $i + $j`     # expr 计算和  
done  
echo "和是${j}"    # 5050

# sh -x sum.sh           -x 显示执行的情况



# 打包程序
#!/bin/bash
for i in `find /home/shell-practise -name "*.sh"`    # 找到以.sh结尾的文件
do
	tar czvf $i.tgz /home/shell-practise    # czvf 打包    后面是指定目录
done

4.while语句

#!/bin/bash
i=1
while (($i<=10));do
	echo $i
	((i++))
done;


# 按行读取
#!/bin/bash
while read line
do
	echo $line
done </etc/hosts     # 追加 按行读取 hosts文件

5.until语句

#!/bin/bash
a=10
until [[ $a -lt 0 ]] ;do
echo $a;
((a--))
done;

6.case语句

case $1 in
	apache)
	echo "wait instal apache"
	;;
	mysql)
	echo "wait install mysql"
	;;
	*  )
	echo "nothing "
	;;
esac

7.select语句

#!/bin/bash
select i in "python" "java" "c" "c++"
do
	echo "you use $i"
done

8.数组

#!/bin/bash
soft=(
	1
	2
	3
)
echo ${soft[0]}    # 打印第一个参数
echo "the total num is ${#soft[@]}"   # 打印元素总数
echo ${soft[@]}  # 打印所有元素
unset soft[2]   # 删除第三个元素
echo "the total num is ${#soft[@]}"
echo ${soft[@]}  # 打印所有元素

9.读

#!/bin/bash
read -p "please input number" number

if (($number==2));then
	echo "equal"
fi

10.函数

#!/bin/bash
function test()
{
        echo "this is a function"
}
test

11.sed

sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法
sed命令行格式为:
         sed [-nefri] ‘command’ 输入文本        

常用选项:
        -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

        -e∶多点编辑,允许多个脚本指令被执行。
        -r∶支持扩展正则+ ? () {} |
        -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
        -i∶直接修改读取的档案内容,而不是由萤幕输出。      


命令选项:
    p   打印匹配行                           
    =   显示文件行号                        
    a/  在定位行号后附加新文本信息            
    i/  在定位行号后插入新文本信息          
    d   删除定位行                          
    l   显示与八进制ASCII代码等价的控制字符    
    n   从另一个文本中读文本下一行,并附加在下一行   
    g   将模式2粘贴到/pattern n/
    c/  用新文本替换定位文本
    s   使用替换模式替换相应模式
    r   从另一个文本中读文本
    w   写文本到一个文件
    q   第一个模式匹配完成后退出或立即退出
    y   传送字符
    {}  在定位行执行的命令组
    
# 举例
sed -i 's/old/new/g' test.txt    # 将所有的old替换成new
sed 's/^/& /g' test.ext # 在行首添加空格
sed 's/$/&123/g' test.txt # 在行尾加12
sed '/ld/a test007' test.txt   # 全局在ld后加007 
sed '/ld/i test007' test.txt   # 全局在ld前加007 
sed -n '/lindong/p' test.txt  # 打印有lindong的一行
sed -n '1,5p' test.txt # 打印1-5行

12.awk

$NF # 最后一行
awk '{print $4}' test.txt  # 打印第四列   
awk -F: '{print $1}' test.txt # 去掉分号(变为空格)打印第一列
awk '{print "第四列" $4}'    # 双引号里微注释

13.grep

grep "^11" filename   # 找出以11开头的行
grep "$11" filename   # 找出以11开头的行
cat filename | grep -v "45"  # 找出没有45的那些行
grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" test.txt  # 查找ip地址
grep -n "lindong" test.txt    # 显示行号
egrep "lindong|10" test.txt  # 深度匹配

14.find

find / -name "test.txt"   # 从根目录递归去找test.text文件
find . -maxdepth 1 -type f -name "test.txt" -mtime +30 -size +20m -exec rm -rf {} \;
# exec是承接命令  {}是占位符 \;是固定结构
转载原创文章请注明,转载自: ت » shell基础(一)
Not Comment Found