Shell脚本Demo29例.docx
- 文档编号:30521142
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:26
- 大小:23.81KB
Shell脚本Demo29例.docx
《Shell脚本Demo29例.docx》由会员分享,可在线阅读,更多相关《Shell脚本Demo29例.docx(26页珍藏版)》请在冰豆网上搜索。
Shell脚本Demo29例
【例子:
001】判断输入为数字,字符或其他
1.#!
/bin/bash
2.read -p "Enter a number or string here:
" input
3.case $input in
4. [0-9]) echo -e "Good job, Your input is a numberic!
\n" ;;
5.[a-zA-Z]) echo -e "Good job, Your input is a character!
\n" ;;
6. *) echo -e "Your input is wrong, input again!
\n" ;;
7.esac
【例子:
002】求平均数
1.#!
/bin/bash
2.# Calculate the average of a series of numbers.
3.SCORE="0"
4.AVERAGE="0"
5.SUM="0"
6.NUM="0"
7.while true; do
8. echo -n "Enter your score [0-100%] ('q' for quit):
"; read SCORE;
9. if (("$SCORE" < "0")) || (("$SCORE" > "100")); then
10. echo "Be serious. Common, try again:
"
11. elif [ "$SCORE" == "q" ]; then
12. echo "Average rating:
$AVERAGE%."
13. break
14. else
15. SUM=$[$SUM + $SCORE]
16. NUM=$[$NUM + 1]
17. AVERAGE=$[$SUM / $NUM]
18. fi
19.done
20.echo "Exiting."
【例子:
003】自减输出
1.[scriptname:
doit.sh]
2.while (( $# > 0 ))
3.do
4. echo $*
5. shift
6.done
7./> ./doit.sh a b c d e
8.a b c d e
9.b c d e
10.c d e
11.d e
12.e
【例子:
004】在文件中添加前缀
1.# 人名列表
2.# cat namelist
3.Jame
4.Bob
5.Tom
6.Jerry
7.Sherry
8.Alice
9.John
10.# 脚本程序
11.# cat namelist.sh
12.#!
/bin/bash
13.for name in $(cat namelist)
14.do
15. echo "name= " $name
16.done
17.echo "The name is out of namelist file"
18.# 输出结果
19.# ./namelist.sh
20.name= Jame
21.name= Bob
22.name= Tom
23.name= Jerry
24.name= Sherry
25.name= Alice
26.name= John
【例子:
005】批量测试文件是否存在
1.[root@host ~]# cat testfile.sh
2.#!
/bin/bash
3.for file in test*.sh
4.do
5. if [ -f $file ];then
6. echo "$file existed."
7. fi
8.done
9.[root@host ~]# ./testfile.sh
10.test.sh existed.
11.test1.sh existed.
12.test2.sh existed.
13.test3.sh existed.
14.test4.sh existed.
15.test5.sh existed.
16.test78.sh existed.
17.test_dev_null.sh existed.
18.testfile.sh existed.
【例子:
005】用指定大小文件填充硬盘
1.[root@host ~]# df -ih /tmp
2.Filesystem Inodes IUsed IFree IUse% Mounted on
3./dev/mapper/vg00-lvol5
4. 1000K 3.8K 997K 1% /tmp
5.[root@host ~]# cat cover_disk.sh
6.#!
/bin/env bash
7.counter=0
8.max=3800
9.remainder=0
10.while true
11.do
12. ((counter=counter+1))
13. if [ ${#counter} -gt $max ];then
14. break
15. fi
16. ((remainder=counter%1000))
17. if [ $remainder -eq 0 ];then
18. echo -e "counter=$counter\tdate=" $(date)
19. fi
20. mkdir -p /tmp/temp
21. cat < testfile > "/tmp/temp/myfile.$counter"
22. if [ $?
-ne 0 ];then
23. echo "Failed to write file to Disk."
24. exit 1
25. fi
26.done
27.echo "Done!
"
28.[root@host ~]# ./cover_disk.sh
29.counter=1000 date= Wed Sep 10 09:
20:
39 HKT 2014
30.counter=2000 date= Wed Sep 10 09:
20:
48 HKT 2014
31.counter=3000 date= Wed Sep 10 09:
20:
56 HKT 2014
32.cat:
write error:
No space left on device
33.Failed to write file to Disk.
34.dd if=/dev/zero of=testfile bs=1M count=1
【例子:
006】通过遍历的方法读取配置文件
1.[root@host ~]# cat hosts.allow
2.127.0.0.1
3.127.0.0.2
4.127.0.0.3
5.127.0.0.4
6.127.0.0.5
7.127.0.0.6
8.127.0.0.7
9.127.0.0.8
10.127.0.0.9
11.[root@host ~]# cat readlines.sh
12.#!
/bin/env bash
13.i=0
14.while read LINE;do
15. hosts_allow[$i]=$LINE
16. ((i++))
17.done < hosts.allow
18.for ((i=1;i<=${#hosts_allow[@]};i++)); do
19. echo ${hosts_allow[$i]}
20.done
21.echo "Done"
22.[root@host ~]# ./readlines.sh
23.127.0.0.2
24.127.0.0.3
25.127.0.0.4
26.127.0.0.5
27.127.0.0.6
28.127.0.0.7
29.127.0.0.8
30.127.0.0.9
31.Done
【例子:
007】简单正则表达式应用
1.[root@host ~]# cat regex.sh
2.#!
/bin/env sh
3.#Filename:
regex.sh
4.regex="[A-Za-z0-9]{6}"
5.if [[ $1 =~ $regex ]]
6.then
7. num=$1
8. echo $num
9.else
10. echo "Invalid entry"
11. exit 1
12.fi
13.[root@host ~]# ./regex.sh 123abc
14.123abc
15.#!
/bin/env bash
16.#Filename:
validint.sh
17.validint(){
18. ret=`echo $1 | awk '{start = match($1,/^-?
[0-9]+$/);if (start == 0) print "1";else print "0"}'`
19. return $ret
20.}
21.validint $1
22.if [ $?
-ne 0 ]; then
23. echo "Wrong Entry"
24. exit 1
25.else
26. echo "OK!
Input number is:
" $1
27.fi
【例子:
008】简单的按日期备份文件
1.#!
/bin/bash
2.NOW=$(date +"%m-%d-%Y") # 当前日期
3.FILE="backup.$NOW.tar.gz" # 备份文件
4.echo "Backing up data to /tmp/backup.$NOW.tar.gz file, please wait..." #打印信息
5.tar xcvf /tmp/backup.$NOW.tar.gz /home/ /etc/ /var # 同时备份多个文件到指定的tar压缩文件中
6.echo "Done..."
【例子:
009】交互式环境select的使用
1.#!
/bin/bash
2.echo "What is your favorite OS?
"
3.select OS in "Windows" "Linux/Unix" "Mac OS" "Other"
4.do
5. break
6.done
7.echo "You have selected $OS"
8.root@localhost:
~/training# ./select.sh
9.What is your favorite OS?
10.1) Windows
11.2) Linux/Unix
12.3) Mac OS
13.4) Other
14.#?
1
15.You have selected Windows
【例子:
010】批量修改文件名的脚本
1.#!
/bin/bash
2.# we have less than 3 arguments. Print the help text:
3.if [ $# -lt 3 ]; then
4. cat <<-EOF
5. ren -- renames a number of files using sed regular expressions
6. USAGE:
ren.sh 'regexp' 'replacement' files
7. EXAMPLE:
rename all *.HTM files in *.html:
8. ren 'HTM$' 'html' *.HTM
9. EOF
10. exit 0
11.fi
12.OLD="$1"
13.NEW="$2"
14.# The shift command removes one argument from the list of
15.# command line arguments.
16.shift
17.shift
18.# $* contains now all the files:
19.for file in $*
20.do
21.if [ -f "$file" ]; then
22. newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"`
23. if [ -f "$newfile" ]; then
24. echo "ERROR:
$newfile exists already"
25. else
26. echo "renaming $file to $newfile "
27. mv "$file" "$newfile"
28. fi
29.fi
30.done
31.root@localhost:
~/training# ./ren.sh "HTML$" "html" file*.HTML
32.renaming file10.HTML to file10.html
33.renaming file1.HTML to file1.html
34.renaming file2.HTML to file2.html
35.renaming file3.HTML to file3.html
36.renaming file4.HTML to file4.html
37.renaming file5.HTML to file5.html
38.renaming file6.HTML to file6.html
39.renaming file7.HTML to file7.html
40.renaming file8.HTML to file8.html
41.renaming file9.HTML to file9.html
【例子:
011】break语句在脚本中的应用示例
1.#!
/bin/bash
2.for VAR1 in 1 2 3
3.do
4. for VAR2 in 0 5
5. do
6. if [ $VAR1 -eq 2 -a $VAR2 -eq 0 ]
7. then
8. break 2 # 退出第二重循环,亦即退出整个循环
9. else
10. echo "第一个变量:
$VAR1 第二个变量:
$VAR2"
11. fi
12. done
13.done
14.root@localhost:
~/training# ./test.sh
15.第一个变量:
1 第二个变量:
0
16.第一个变量:
1 第二个变量:
5
【例子:
012】/dev/tty在读取人工输入中的特殊作用
1.#!
/bin/bash
2.# 用来验证两次输入的密码是否一致
3.printf "Enter your passwd:
" # 提示输入
4.stty -echo # 关闭自动打印输入字符的功能
5.read pwd1 < /dev/tty # 读取密码
6.printf "\nEnter again:
" # 再次提示输入
7.read pwd2 < /dev/tty # 再读取一次以确认
8.stty echo # 打开自动打印输入字符的功能
9.if [[ "$pwd1" == "$pwd2" ]]; then # 对两次输入的密码进行判断
10. echo -e "\nPASSWORD:
the same"
11.else
12. echo -e "\nPASSWORD:
not same"
13.fi
14.root@localhost:
~/training# ./test.sh
15.Enter your passwd:
16.Enter again:
17.PASSWORD:
the same
【例子:
013】/dev/null在脚本中的简单示例
1.#!
/bin/bash
2.if grep /bin/bash $0 > /dev/null 2>&1 # 只关心命令的退出状态而不管其输出
3.then # 对退出状态进行判断
4. echo -e "/bin/bash in $0\n"
5.else
6. echo -e "/bin/bash not in $0\n"
7.fi
8.脚本输出:
9.root@localhost:
~/training# ./test.sh
10./bin/bash in ./test.sh
【例子:
014】构建自己的bin目录存放执行脚本,然后随便执行的简单示例
1.$ cd # 进入家目录
2.$ mkdir bin # 创建$HOME目录下自己的bin目录
3.$ mv test.sh bin # 将我们自己的脚本放到创建的bin目录下
4.$ PATH=$PATH:
$HOME/bin # 将个人的bin目录放到PATH中
5.$ test.sh # 现在就可以直接执行自己的脚本了
【例子:
015】将长句子中单词长度为5及以上的单词打印出来
1.#!
/bin/bash
2.# filename:
test.sh
3.sentence="When you're attracted to someone it just means that your subconscious is attracted to their subconscious, subconsciously.
4.So what we think of as fate, is just two neuroses knowing they're a perfect match."
5.for word in ${sentence}
6.do
7. new=`echo $word | tr -cd '[a-zA-Z]'` # 去除句子中的 ,或者'
8. len=${#new} # 求长度
9. if [ "$len" -ge 5 ] # 再判断
10. then
11. echo $new
12. fi
13.done
14.root@localhost:
~# ./test.sh
15.youre
16.attracted
17.someone
18.means
19.subconscious
20.attracted
21.their
22.subconscious
23.subconsciously
24.think
25.neuroses
26.knowing
27.theyre
28.perfect
29.match
【例子:
016】根据输入的数据(年4位,月2位),来判断上个月天数
1.#!
/bin/bash
2.get_last_day()
3.{
4. year=`expr substr $1 1 4`
5. month=`expr substr $1 5 2`
6. curr_month=`echo $month | tr -d '0'` # 去掉里面的0,方便后面计算
7. echo "curr_month=$curr_month"
8. last_month=`expr $curr_month - 1`
9. case $last_month in
10. 01|03|05|07|08|10|12|0)
11. echo "上个月天数-->" 31 ;;
12.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Shell 脚本 Demo29