• ベストアンサー

シェルスクリプト(.sh)で、10進数文字を16進数へ変換したい

shスクリプトについて質問です。 10進数の0~15までが入った配列の値を、 10~15だけ、16進数のA~Fに変えたいです。 trコマンドで、"[:digit:]"っていうのがあったのですが、 全く使い方が見当たりませんでした^^; 何か一例いただけないでしょうか^^; 別にtrコマンドでなくても良いので、 どのようにすれば、shスクリプト内でやりたい事が できるか、教えていただけないでしょうかm(__)m

質問者が選んだベストアンサー

  • ベストアンサー
noname#111181
noname#111181
回答No.4

ご質問の主旨を誤解していました。 下記でできます。 ------------------------------------- i=13 i=$(printf "%x" $i) echo $i

darkness22
質問者

補足

--------------------------- #!/bin/sh i=13 i=`printf '%x' $i` echo $i で、実行すると、 --- : command not found : invalid number 4: printf: 13 --- --------------------------- #!/bin/sh i=13 i=$(printf "%x" $i) echo $i で、実行すると、 ----- : command not found : command not found : invalid number 5: printf: 13 0 ----- --------------------------- なんかやっちゃってますかね^^;

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • notnot
  • ベストアンサー率47% (4856/10271)
回答No.6

>: command not found >: invalid number 4: printf: 13 改行コードがCRLF(Windows用)になってますね。Windowsで作成したファイルをバイナリモードでftpしたのですか? ファイルはLinux上でゼロから作るか、ftpするならテキストモードで。

darkness22
質問者

お礼

ありがとうございます。 FTPでやってるんですが何故だろう。 一回、Linux上でファイル作ってみます。

全文を見る
すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.5

> command not found printf って、bashとかで独自に追加した組込みコマンドだから、標準のshだと使えないことがあると思います。 中にはshの実体がbash等になっていて、printfが使えることもありますが。 互換性を考えたら使わない方がいいでしょう。

darkness22
質問者

お礼

printf自体は使えない場合があるのですか。 互換性がないものは確かに微妙ですね。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

ん~, i=`printf '%x' $i` でいいような気もする.

darkness22
質問者

補足

--------------------------- #!/bin/sh i=13 i=`printf '%x' $i` echo $i で、実行すると、 --- : command not found : invalid number 4: printf: 13 --- --------------------------- #!/bin/sh i=13 i=$(printf "%x" $i) echo $i で、実行すると、 ----- : command not found : command not found : invalid number 5: printf: 13 0 ----- --------------------------- なんかやっちゃってますかね^^;

全文を見る
すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

表示しただけでは、変数に入らないのは当り前の話ですね 表示内容を変数に代入しなければなりません 例えば、 i=`echo $i | awk '{printf("%x", $1)}'`

全文を見る
すると、全ての回答が全文表示されます。
noname#111181
noname#111181
回答No.1

awkを使って下記のようにしてみてはいかがでしょう。 「数字」の部分に10進数値を入れてください。 echo 数字 | awk '{printf("%x\n", $1)}'

darkness22
質問者

お礼

ありがとうございます。 変換は出来たのですが、 i=13 echo $i | awk '{printf("%x\n", $1)}' echo $i としたら、 d 13 と表示されました^^; この$iを、dに書き換える方法はありますでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • シェルでreadの文字数

    Bシェルでreadを使用する際に取得可能な文字数の制限ってあるのでしょうか。 スクリプト: 下記test.logのset行のみ、4つ目のカラムを0に変更し、 その他の行はそのまま表示させたい。 # cat test.log set test01 0 2222 6 0.83322 set test02 1 3429 7 test002 set test03 0 9872 222 0.704073409098534720779 #!/bin/sh RENAM_F=/tmp/test2.log while read F1 F2 F3 F4 F5 do if [ $F1 = "add" ]; then echo "$F1 $F2 $F3 0 $F5" >>$RENAM_F else echo "$F1" >>$RENAM_F fi done < test.log ============ 上記スクリプトを実行すると、長い文字列は切れてしまいます。 例えば、最後の値の「0.704073409098534720779」は「0.704073409098534」までしか 表示されません。

  • シェルスクリプト

    こんばんわ。最近Tru64でシェルスクリプトを書いています。そこで質問ですが、 前の実行コマンドが正常に終了したら次のコマンドが実行されるスクリプトはどのように書けばよいのでしょうか? if文で可能なのでしょうか? またkillコマンドをawkで kill psID OK?(y/n) と表示させyを押せばkillするようにするにはどのようにすればよいですか? 例のように表示させることはawkでできるのですがどうしたらy入力後killできるのかわかりません。 これもif文を使わなければだめなのでしょうか? よろしくお願いします。

  • シェルスクリプトに関しての質問です

    シェルスクリプトに関しての質問です result1からresult365まで365個のファイルがあります。 このファイルには UA 数値 (数値は任意の数)という行が存在する場合と存在しない場合があります。 ファイルの中から US 数値 の 数値の値を知る(UA 数値の行がなければ0とする)のが目的です。 しかし単にgrep UA result$i というコマンドをforを使って繰り返しただけでは、0の値がでてきません。 testコマンドと組み合わせてみましたが、UA 数値 という行が存在しない場合をうまく扱えずにだめでした。どうしたらいいでしょうか?

  • シェルスクリプトでの演算

    シェルスクリプトで、多項式の演算の記述の仕方を教えてください。 (a+2)+(a*3)-4 のような式はどう記述すればいいのでしょうか。 初歩的な事がわかっていなくてすみません。 よろしくお願いします。 ちなみに.shです。

  • シェルスクリプト 引数の引渡しについて

    こんにちは。現在シェルスクリプトを勉強中なのですがどうしてもわからないことがあり投稿させていただきました。 シェルスクリプトにて作成した引数(引数にスペースがある場合)を別のシェルスクリプトへ渡そうとしたときにうまく引き渡せなくて困っています。 詳しくは以下のスクリプト参照願います。 (1)引数作成のスクリプト _/_/_/_/_/_/_/_/_/_/_/_/ #!/bin/sh a="HELLO" b="\"WOW WOW\"" test.sh $a $b _/_/_/_/_/_/_/_/_/_/_/_/ (2)test.sh _/_/_/_/_/_/_/_/_/_/_/_/ #!/bin/sh echo $1 echo $2 echo $3 _/_/_/_/_/_/_/_/_/_/_/_/ これを実行すると $1=HELLO $2="WOW $3=WOW" となってしまいます。 これを $1=HELLO $2=WOW WOW $3=NULL(空欄) となるようにシェルスクリプトで作成することはできないのでしょうか? ご教授よろしくお願いします。 よろしくお願いします。

  • Linuxシェルスクリプトを新しいコマンドにしたい

    Linux初級者です。よろしくお願いします。 OSにFedora Core 10, シェルにtcshを使用しています。 よく使用するコマンドを、まとめて一括で実行するように、 新しいコマンドを作成したくて、次のようなことをしていたのですが (1)ホームディレクトリにmybinというディレクトリを作成してPATHを通す。 (2)newbin1という以下の内容のシェルスクリプトを作成して、~/mybinに置いておく。 ================================== #!/bin/tcsh -f date #実行コマンド例1 echo $PATH #実行コマンド例2 ================================== (3)chmodコマンドでファイルに実行権限を与える。 上記のような方法で、作成したシェルスクリプト(newbin1)を PATHの通ったディレクトリ(~/mybin)に置いて、 > newbin1 とコマンドを呼び出しても、 "newbin1: コマンドが見つかりません" というエラーになってしまいます。 > which newbin1 とすると、ちゃんとファイルのパスが表示されるのですが、 *********************************************************** 自分で作成したシェルスクリプト(newbin1)を、 新しいコマンドとして認識させるにはどのようにすればよいのでしょうか。 また、そもそもシェルスクリプトを新しいコマンドにすることが 不可能だったりするんでしょうか? ************************************************************ 一括で実行したいコマンドが多い場合に、aliasで割り当てるのが大変なので、 できればaliasコマンドは使わずにできる方法を探しています。 基本的な質問かもしれませんが、よろしくお願い致します。

  • Linuxのシェルスクリプトについて

    最近Linuxの使い方を勉強し始めたのですが シェルスクリプトについてわからないところがあるので教えてください。 カレンダーを出力するスクリプト #/bin/sh n=$1 while [ $n -le $2 ]; do echo "year $n" cal $n n=`expr $n + $3` done というcal.shという名前のスクリプトを作りました。 ./cal.sh x y z (x,yは年数、zは何年飛ばしで表示するかを指定する引数です) と実行すると問題なくカレンダーが表示されるのですが x,y,zの値に不適切な入力値がある場合や、引数の数が2つより少ない場合 使い方を示すメッセージを出力してプログラムを終了するようにしたいです どうすればいいのかわかりません。 本当に困っています。 親切な方のご回答をお待ちしています。

  • シェルスクリプト内での四則演算

    非常に基本的な事だと思うのですが、どうしても解決できないので質問させてください。 シェルスクリプトで四則演算をしたいです。expr を使って下記の通りに書きました。 ---------------- #!/bin/sh echo $1 echo $2 AA='expr $1 + $2' echo "$AA" ---------------- これを test.sh として保存し、 $ sh test.sh 1 2 と試してみると、出力が ---------------- 1 2 expr $1 + $2 ---------------- となります。最後の行は 3 になってもらいたいのですが。 ちなみに、普通にコマンドプロンプトで $ expr 1 + 2 とやれば 3 と出てきます。 環境は Ubuntu 9.04 よろしくお願いします。

  • シェルスクリプトの引数について

    test.sh '*.c' といったコマンドを入力した時に、 シェルスクリプト内で引数$1を受け取ったときに$1='*.c'となるのではなく、 カレントディレクトリ内にある'*.c'の正規表現にマッチするファイルが入ってしまっています。 例)カレントディレクト内にaaa.cファイルbbb.cファイルといったファイルがある時は、 $1=aaa.c bbb.cとなっています。 '*.c'の正規表現自体をシェルスクリプト内で受け取る方法はないのでしょうか? シェルはbashを使用しています。

  • シェルスクリプト 結果表示

    はじめまして。 シェルスクリプトを教えてください。 質問 ・nslookupで指定したipアドレスの  接続結果が成功なら0を表示 失敗なら1を表示  するというのがつくれません。お願いします  なにかコマンドはコマンド結果に対して  バックで表示されないcodeがあるらしいのですが。 ちなみにsolarisで #!/bin/sh で宜しくお願いします