aud*_*tic 2 c unix linux bash shell
我是shell脚本的新手(字面意思是我的第一天),我正在使用它为我的一个类创建可移植的C代码.我想定义一个CPP指令,它将定义我正在编译的系统的字节顺序(无论是Solaris,BSD,Linux,OSX等,都有一点困难.
我当前脚本的关键是以下行:
printf '\1' | od -dAn;
Run Code Online (Sandbox Code Playgroud)
这1为小端和256大端输出(我已经在我的所有系统上测试过,它似乎可以完成这项工作).
现在,当我将它添加到以下脚本时,它似乎不能很好地播放.
CONFIG_HRD="config.h"
ENDIAN=printf '\1' | od -dAn;
touch $CONFIG_HRD
if $ENDIAN -eq \1; then
echo "#define LITTLE_ENDIAN" >> $CONFIG_HRD
else
echo "#define BIG_ENDIAN" >> $CONFIG_HRD
fi
Run Code Online (Sandbox Code Playgroud)
它失败并出现以下错误
./script.sh: line 2: \1: command not found
./script.sh: line 5: -eq: command not found
Run Code Online (Sandbox Code Playgroud)
如果有人能告诉我我做错了什么,我会很感激.谢谢
====== edit =======以下代码现在产生以下错误:
CONFIG_HRD="config.h"
ENDIAN=$(printf '\1' | od -dAn)
touch $CONFIG_HRD
if `$ENDIAN -eq 1`; then
echo "#define LITTLE_ENDIAN" >> $CONFIG_HRD
else
echo "#define BIG_ENDIAN" >> $CONFIG_HRD
fi
Run Code Online (Sandbox Code Playgroud)
这个错误:
./script.sh: line 5: 1: command not found
Run Code Online (Sandbox Code Playgroud)
此代码导致以下错误:
CONFIG_HRD="config.h"
ENDIAN=$(printf '\1' | od -dAn)
touch $CONFIG_HRD
if `$ENDIAN=1`; then
echo "#define LITTLE_ENDIAN" >> $CONFIG_HRD
else
echo "#define BIG_ENDIAN" >> $CONFIG_HRD
fi
Run Code Online (Sandbox Code Playgroud)
错误:
./script.sh: line 5: 1=1: command not found
Run Code Online (Sandbox Code Playgroud)
而这一个(括号而不是刻度)会导致另一个错误:
CONFIG_HRD="config.h"
ENDIAN=$(printf '\1' | od -dAn)
touch $CONFIG_HRD
if [$ENDIAN=1]; then
echo "#define LITTLE_ENDIAN" >> $CONFIG_HRD
else
echo "#define BIG_ENDIAN" >> $CONFIG_HRD
fi
Run Code Online (Sandbox Code Playgroud)
错误:
./script.sh: line 5: [: missing `]'
Run Code Online (Sandbox Code Playgroud)
尝试:
ENDIAN=$(printf '\1' | od -dAn)
Run Code Online (Sandbox Code Playgroud)
或(带回蜱)
ENDIAN=`printf '\1' | od -dAn`
Run Code Online (Sandbox Code Playgroud)
将结果存储到var.
取决于您正在使用语法的shell if.
if [ $ENDIAN -eq 1 ]; then
Run Code Online (Sandbox Code Playgroud)