Shell脚本之进制转换器的实现(如何使shell脚本成为可执行)一看就会

随心笔谈2年前发布 admin
169 0 0

文章摘要

这篇文章描述了一个Bash脚本(名为conversion.sh),用于实现二进制和十进制之间的转换。脚本支持多种进制转换类型,包括二进制到十进制、十进制到二进制、八进制、十六进制之间的转换。脚本通过条件判断检查输入是否符合目标进制要求,并使用`bc`工具进行计算。如果输入不符合要求,脚本会提示用户正确输入形式。脚本共定义了11种转换类型,处理了二进制、八进制、十进制和十六进制四种进制的转换。

#!/bin/bash
#script name: conversion.sh
#author: wuhs
#description: 此脚本用于二进制和十进制之间的转换
#date: 2022-05-09

#参数定义
#进制转换类型参数
f=$1
#待转换数值参数
d=$2

case $1 in
? 2to10)
? ? if echo $d |grep -E “^[0,1]*$” >/dev/null;then
? ? ? echo “obase=10;ibase=2;$d” |bc
? ? else
? ? ? echo “参数2要求输入二进制数”
? ? fi
? ;;
? 10to2)
? ? if echo $d |grep -E “^[0-9]*$” >/dev/null;then
? ? ? echo “obase=2;ibase=10;$d” |bc
? ? else
? ? ? echo “参数2要求输入十进制整数”
? ? fi
? ;;
? 8to10)
? ? if echo $d |grep -E “^[01234567]*$” >/dev/null;then
? ? ? echo “obase=10;ibase=8;$d” |bc
? ? else
? ? ? echo “参数2要求输入八进制字符”
? ? fi
? ;;
? 10to8)
? ? if echo $d |grep -E “^[0-9]*$” >/dev/null;then
? ? ? echo “obase=8;ibase=10;$d” |bc
? ? else
? ? ? echo “参数2要求输入十进制整数”
? ? fi
? ;;
? 16to10)
? ? if echo $d |grep -E “^[0-9A-Fa-f]*$” >/dev/null;then
? ? ? d=`echo $d |tr a-z A-Z`
? ? ? echo “obase=10;ibase=16;$d” |bc
? ? else
? ? ? echo “参数2要求输入十六进制字符”
? ? fi
? ;;
? 10to16)
? ? if echo $d |grep -E “^[0-9]*$” >/dev/null;then
? ? ? echo “obase=16;ibase=10;$d” |bc
? ? else
? ? ? echo “参数2要求输入十进制整数”
? ? fi
? ;;
? 2to8)
? ? if echo $d |grep -E “^[0,1]*$” >/dev/null;then
? ? ? echo “obase=8;ibase=2;$d” |bc
? ? else
? ? ? echo “参数2要求输入二进制数”
? ? fi
? ;;
? 8to2)
? ? if echo $d |grep -E “^[01234567]*$” >/dev/null;then
? ? ? echo “obase=2;ibase=8;$d” |bc
? ? else
? ? ? echo “参数2要求输入八进制字符”
? ? fi
? ;;
? 2to16)
? ? if echo $d |grep -E “^[0,1]*$” >/dev/null;then
? ? ? echo “obase=16;ibase=2;$d” |bc
? ? else
? ? ? echo “参数2要求输入二进制数”
? ? fi
? ;;
? 16to2)
? ? if echo $d |grep -E “^[0-9A-Fa-f]*$” >/dev/null;then
? ? ? d=`echo $d |tr a-z A-Z`
? ? ? echo “obase=2;ibase=16;$d” |bc
? ? else
? ? ? echo “参数2要求输入十六进制字符”
? ? fi
? ;;
? 8to16)
? ? if echo $d |grep -E “^[01234567]*$” >/dev/null;then
? ? ? echo “obase=16;ibase=8;$d” |bc
? ? else
? ? ? echo “参数2要求输入八进制字符”
? ? fi
? ;;
? 16to8)
? ? if echo $d |grep -E “^[0-9A-Fa-f]*$” >/dev/null;then
? ? ? d=`echo $d |tr a-z A-Z`
? ? ? echo “obase=8;ibase=16;$d” |bc
? ? else
? ? ? echo “参数2要求输入十六进制字符”
? ? fi
? ;;
? *)
? ? echo “参数1输入错误”
? ? exit
? ;;
esac

© 版权声明

相关文章