Linux命令行和shell脚本编程宝典 Richard Blum

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

第一个脚本文件

复制代码

代码如下:

#!/bin/bash

echo “This is my first bash code!”

exit 0

重定向符号和数学计算

复制代码

代码如下:

#!/bin/bash

echo -n “The time and date are: “

date

value1=100  #等号前后不允许出现空格

value2=$value1

echo -n “value1=”

echo $value1

echo -n “value2=”

echo $value2

ls -l | sort > out.txt   #管道符号(|)和重定向输出符号>

ls -l >> out.txt   #重定向追加输出符号>>

echo -n  “wc

wc < out.txt  #重定向输入符号<

echo “sort<

sort << EOF  #内置输入重定向<<

`date`

EOF

#数学计算

echo -n “expr进行计算:1+5=”

expr 1+5

echo -n “使用方括号进行计算:1+5=”

echo $[1+5]

echo “使用bc计算器进行浮点运算”

var1=100

var2=200

var3=`echo “scale=4;$var1/$var2” | bc`

echo “$var1 / $var2 = $var3”

var4=71

var5=`bc<

scale=4

a1=($var1*$var2)

b1=($var3*$var4)

a1+b1

EOF`

echo “var5=$var5”

exit 0

使用test命令

复制代码

代码如下:

#!/bin/bash

#使用test命令

var1=10

var2=100

if [ $var1 -gt $var2 ]

then

    echo “var1 grate var2”

else

    echo “var2 grate var1”

fi

#只能比较整数

test_user=hanxi

if [ $USER = $test_user ]

then

    echo “Welcome $test_user”

fi

str1=Hanxi

str2=hanxi

if [ $str1 &; $str2 ]

then

    echo “$str1 > $str2”

else

    echo “$str1 < $str2”

fi

if [ -n $str1 ]

then

echo “The string $str1 is not empty”

else

    echo “the string $str1 is empty”

fi

#检查文件目录

if [ -d $HOME ]

then

echo “your Home dir exists”

    cd $HOME

    ls -a

else

    echo “theres a problem with your HOME dir”

fi

pwfile=/etc/shadow

if [ -f $pwfile ]

then

    if [ -r $pwfile ]

    then

        tail $pwfile

    else

        echo “Sorry, Im unable to reas the $pwfile file “

fi

else

    echo “Sorry, the file $pwfile doesnt exist”

fi

if [[ $USER == h* ]]

then

    echo “Hello $USER”

else

echo “Sorry, I dont know you”

fi

循环语句

复制代码

代码如下:

#!/bin/bash

for file in /home/hanxi/*

do

    if [ -d “$file” ]

    then

echo “$file is a directory”

    elif [ -f “$file” ]

    then

        echo “$file is a file”

    fi

done

var1=10

while [ $var1 -gt 0 ]

do

    echo $var1

    var1=$[ $var1 – 1 ]

done

var1=100

until [ $var1 -eq 0 ]

do

    echo $var1

var1=$[ $var1 – 25 ]

done

#文件数据的循环

IFSOLD=$IFS

IFS=$n

for entry in `cat /etc/passwd`

do

    echo “Values in $entry -“

    IFS=:

for value in $entry

    do

        echo ” $value”

    done

done | more

for file in /home/hanxi/*

do

    if [ -d “$file” ]

    then

echo “$file is directory”

    elif

        echo “$file is a file”

    fi

done > output.txt

读取参数

复制代码

代码如下:

#!/bin/bash

name=`basename $0`

echo the commane entered is : $name

c_args=$#

echo count args:$c_args

#取最后一个参数

echo the last parameter is ${!#}

echo all parameter: $*

echo all parameter: $@

count=1

for param in “$@”

do

echo “$@ parameter #$count = $param”

    count=$[ $count + 1 ]

done

#getopts

while getopts :ab:c opt

do

    case “$opt” in

a) echo “Found the -a option”;;

    b) echo “Found the -b option, with value $OPTARG”;;

c) echo “Found the -c option”;;

    *) echo “Unknown option : $opt”;;

    esac

done

shift $[ $OPTIND – 1 ]

count=1

for param in “$@”

do

echo “Parameter $count: $param”

    count=$[ $count + 1 ]

done

read -p “Please enter your age:” age

echo age:$age

if read -t 5 -p “Please enter your name: ” name

then

    echo “Hellp $name,welcome to my script”

else

    echo

echo “sorry ,too slow!”

fi

read -n1 -p “Do you want to continue [Y/N]?” answer

case $answer in

Y | y) echo

echo ” fine, continue on…”;;

N | n) echo

       echo OK,Good bye

       exit;;

esac

echo “This is the end of the script”

read -s -p “Enter your password: ” pass

echo

echo “Is your password really $pass?”

#读取文件

count=1

cat for.txt | while read line

do

    echo “Line $count: $line”

    count=$[ $count+1 ]

done

echo “Finished processing the file”

重定向文件描述符

复制代码

代码如下:

#!/bin/bash

#永久重定向

exec 9>&2

exec 2>testerror

echo “this will in testerror”>&2

exec 2<&9

exec 9<&0

exec 0

count=1

while read line

do

    echo “Line #$count:$line”

    count=$[ $count + 1 ]

done

exec 0<&9

#重定向文件描述符

exec 3>&1

exec 1>testout

echo “this should store in the output file”

echo “along with this line.”

exec 1>&3

echo “Now things should be back to nomarl”

exec 4<&0

exec 0

count=1

while read line

do

echo “Line #$count:$line”

    count=$[ $count + 1 ]

done

exec 0<&4

read -p “Are you done now?” answer

case $answer in

Y|y) echo “Goodbye”;;

N|n) echo “continue…”;

esac

#创建读写文件描述符

exec 8<> testfile

read line <&8

echo “Read:$line”

echo “This is a test line” >&8

#关闭文件描述符

exec 8>&-

#列出文件描述服

#`/usr/sbin/lsof -a -p $$`|more

#禁止命令输出

#2 > /dev/null

#创建本地临时文件

tempfile=`mktemp test.XXXXXX`

exec 4>$tempfile

echo “This is the first line”>&3

exec 4>&-

#在/temp中创建临时文件

tmpfile=`mktemp -t tmp.XXXXXX`

echo “The temp file is located at:$tempfile”

cat $tempfile

rm -f $tempfile

#创建临时文件夹

tmpdir=`mktemp -d dir.XXXXXX`

cd $tmpdir

tempfile1=`mktemp temp.XXXXXX`

ls -l

cd ..

#记录消息

a=`date | tee testfile;

cat testfile;

date | tee -a testfile;

cat testfile`

信号处理

复制代码

代码如下:

#!/bin/bash

#信号处理

trap “echo get a sign” SIGINT SIGTERM

trap “echo byebye” EXIT

echo “This is a test program”

count=1

while [ $count -le 10 ]

do

    echo “Loop #$count”

    sleep 10

    count=$[ $count+1 ]

done

echo “This is the end of the test program”

trap – EXIT#移除捕获

#后台牧师运行

#./test6.sh &

#不使用终端的情况下运行脚本

#nohup ./test6.sh &

#查看作业

#jobs

#重新启动作业

#bg 2(作业序号)//后台

#fg 2//前台

#优先级

#nice -n 10 ./test6.sh

#renice 10 -p 25904(进程号)

#预计时间运行at命令

#at -f test6.sh 20:00

#batch命令,系统平均负载低于0.8时运行,可以设定时间,比at命令更好

#corn表格可以设定循环运行,格式:

#min hour dayofmonth month dayofweek command

#每个月第一天运行:

#12 16 * * 1 command

#每个月最后一天运行:

#12 16 * * * if [ `date +%d =d tommorrow` = 01 ] ; then ; command

函数的使用

复制代码

代码如下:

#!/bin/bash

#函数

#使用返回值

function func1

{

read -p “Enter a value: ” value

    echo $[ $value * 2 ]

}

result=`func1`

echo “the new value is $result”

#传递参数

function func2

{

    echo $[ $1+$2 ]

}

result=`func2 2 2`

echo “the new result is $result”

#局部变量, 递归

function func3

{

if [ $1 -eq 1 ]

    then

        echo 1

    else

        local temp=$[ $1-1 ]

        local result=`func3 $temp`

        echo $[ $result*$1 ]

    fi

}

read -p “Enter value:” value

result=`func3 $value`

echo “the factorial of $value is: $result”

#调用当前目录下到函数库

#. ./myfuncs

免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容