正文

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

文章摘要

这篇文章介绍了一个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