手机
当前位置:查字典教程网 >脚本专栏 >linuxshell >Linux命令行和shell脚本编程宝典 Richard Blum
Linux命令行和shell脚本编程宝典 Richard Blum
摘要:第一个脚本文件复制代码代码如下:#!/bin/bashecho"Thisismyfirstbashcode!"exit0重定向符号和数学计算...

第一个脚本文件

复制代码 代码如下:

#!/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<out.txt:"

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

echo "sort<<EOF ... EOF"

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<<EOF

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 "there's a problem with your HOME dir"

fi

pwfile=/etc/shadow

if [ -f $pwfile ]

then

if [ -r $pwfile ]

then

tail $pwfile

else

echo "Sorry, I'm unable to reas the $pwfile file "

fi

else

echo "Sorry, the file $pwfile doesn't exist"

fi

if [[ $USER == h* ]]

then

echo "Hello $USER"

else

echo "Sorry, I don't 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<testin

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<testin

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

【Linux命令行和shell脚本编程宝典 Richard Blum】相关文章:

linux下mysql如何自动备份shell脚本

Linux下使用Shell脚本实现ftp的自动上传下载的代码小结

积累linux常用命令大全

shell脚本实现批量采集爱站关键词库

shell编程基础之认识与学习BASH

shell脚本编程之for语句、if语句使用介绍

判断输入的日期是否正确的shell脚本

一键备份gitolite服务器的Shell脚本

Shell脚本注释写法

Shell脚本case语句简明教程

精品推荐
分类导航