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

随心笔谈9个月前更新 admin
195 00
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

文章摘要

这篇文章介绍了一个Shell脚本(名为conversion.sh),用于进行二进制、八进制、十进制和十六进制之间的转换。脚本通过参数定义了输入类型(如`2to10`表示二进制转十进制),并使用`bc`命令进行计算。每个转换类型都有对应的条件判断,确保输入符合预期(例如,二进制输入只能包含0和1)。此外,脚本还提供了错误处理功能,提示用户输入格式错误时应执行的操作。总体来看,这是一个简单而实用的进制转换工具。

#!/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

© 版权声明

相关文章