在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
第一个脚本文件 复制代码 代码如下: #!/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 |
请发表评论