PJzhang:鸟哥的linux私房菜-shell脚本-上

 猫宁~~~

 

建议全程在centos7中进行,我在kali linux中有些命令无法执行。

 

1~家目录下创建bin文件,test.sh文件在bin目录

下面的shell代码打印Hello World!

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello China! \a \n"
exit 0

2~输入名称,变量前空格一定要严格空出来哦

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "Please input your first name:" firstname
read -p "Please input your last name:" lastname
echo -e "\nYour full name is:${firstname} ${lastname}"

sh test.sh

echo ${firstname} ${lastname},空

source test.sh

echo ${firstname} ${lastname},不空

3~批量创建文件,自定义名称之后添加时间,设置大量变量

不定义文件名前缀,默认是filename,直接回车即可

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "I will use 'touch' command to create 3 files."
read -p "Please input your filename:" fileuser
filename=${fileuser:-"filename"}
date1=$(date --date="2 days ago" +%Y%m%d)
date2=$(date --date="1 days ago" +%Y%m%d)
date3=$(date +%Y%m%d)
file1=${filename}${date1}
file2=${filename}${date2}
file3=${filename}${date3}
touch "${file1}"
touch "${file2}"
touch "${file3}"

4~两个数相乘运算

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "You should input 2 numbers,I will multiplying them! \n"
read -p "first number:" firstnu
read -p "second number:" secnu
total=$((${firstnu}*${secnu}))
echo "\nThe result of ${firstnu}*${secnu} is ==> ${total}"

 

echo $((120*120))   乘积,整数计算

echo $((13%3))   取余

echo "1.2*1.2" | bc   小数计算,添加bc,bc在centos7上可以用,但是在kali linux上不可以

5~计算π的值,4*a(1)是bc提供的计算π的函数

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "This program will calculate pi value. \n"
echo -e "You should input a float number to calculate pi value. \n"
read -p "The scale number (10~10000):" checking
num=${checking:-"10"}
echo "Starting calcuate pi value. Be patient."
time echo "scale=${num}; 4*a(1)" | bc -lq

6~test判断

目录是否存在

在/root下创建test目录

test -e /test && echo "exist" || echo "Not exist"

打印exist

test -e /root/test && echo "exist" || echo "Not exist"

打印Not exist

-e   文件或目录

-f   针对文件存在与否

-d   针对目录存在与否

文件权限相关

test -s /root/test.html && echo "exist" || echo "Not exist"

-r   可读

-w   可写

-x   可执行

-s   文件是否为空

文件比较

test1.html更新,打印exist

test test1.html -nt test.html && echo "exist" || echo "Not exist"

-nt    更新

-ot   更旧

-ef   是否为同一个文件

整数间判定

test 1 -eq 1 && echo "exist" || echo "Not exist"   打印exist

-eq  相等

-ne   不等

-gt   前者大于后者

-lt   前者小于后者

-ge   前者大于等于后者

-le   前者小于等于后者

字符串判定

test -z 111 && echo "exist" || echo "Not exist"   打印Not exist

-z   字符串为空显示exist,其他显示Not exist

-n   字符串为空显示Not exist,其他显示exist

test 111 == 111 && echo "exist" || echo "Not exist"

111 == 111   相等,打印exist,不相等,打印Not exist

111 != 111   相等,打印Not exist,不相等,打印exsit

多重条件判定

-rw-r--r--. 1 root root 5556 Oct 11 20:49 test.html

test -r test.html -a -x test.html && echo "exist" || echo "Not exist"   打印Not exist

test ! -x test.html && echo "exist" || echo "Not exist"   没有执行权限,打印exist

-a   and关系

-o   or关系

!   相反

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Please input a filename,I wiil check the filename's type and permission. \n\n"
read -p "Input a filename:" filename
test -z ${filename} && echo "You must input a filename." && exit 0
test ! -e ${filename} && echo "The filename '${filename}' DO NOT exist" && exit 0
test -f ${filename} && filetype="regulare file"
test -d ${filename} && filetype="directory"
test -r ${filename} && perm="readable"
test -w ${filename} && perm="${perm} writable"
test -x ${filename} && perm="${perm} executable"
echo "The filename:${filename} is a ${filetype}"
echo "And the permissions for you are:${perm}"

文件名为空显示

You must input a filename.

目录

Input a filename:test
The filename:test is a directory
And the permissions for you are:readable writable executable

文件不存在

Input a filename:120
The filename '120' DO NOT exist

文件存在

Input a filename:test.html
The filename:test.html is a regulare file
And the permissions for you are:readable writable

7~判断符号

[ "abcd" == "abcd" ] ; echo $?   打印0

[ "abcd" == "abc" ] ; echo $?   打印1

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "Please input (Y/N):" yn
[ "${yn}" == "Y" -o "${yn}" == "y" ] && echo "OK,continue" && exit 0
[ "${yn}" == "N" -o "${yn}" == "n" ] && echo "Oh,interrupt" && exit 0
echo "I don't know what your choice is" && exit 0

 8~默认变量

[root@pjzhang ~]# file /etc/init.d/network
/etc/init.d/network: Bourne-Again shell script, ASCII text executable

文件是可执行脚本

/etc/init.d/network   stop,start,status

$0   脚本文件名

$#   后接参数个数

$@   参数全部内容,加双引号

${1}   第一个参数

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo "The script name is    ==>${0}"
echo "Total parameter number is    ==>$#"
[ "$#" -lt 2 ] && echo "The number of parameter is less than 2. Stop here." && exit 0
echo "Your whole parameter is    ==>'$@'"
echo "The 1st parameter    ==>${1}"
echo "The 2st parameter    ==>${2}"

 第一次偏移掉1个,第二次在第一次基础上偏移掉3个,从前向后

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo "Total parameter number is     ==>$#"
echo "Your whole parameter is    ==>'$@'"
shift
echo "Total parameter number is     ==>$#"
echo "Your whole parameter is    ==>'$@'"
shift 3
echo "Total parameter number is     ==>$#"
echo "Your whole parameter is    ==>'$@'"

 

 

over~~~

 

posted @ 2020-10-11 22:43  PJzhang  阅读(361)  评论(0编辑  收藏  举报